OpenRTMFP/Cumulus Primer(23)執行緒邏輯分析之二:RTMFPManager對RTMFPServer的影響
OpenRTMFP/Cumulus Primer(23)執行緒邏輯分析之二:RTMFPManager對RTMFPServer的影響
- 作者:柳大·Poechant(鍾超 Michael)
- 部落格:Blog.csdn.net/poechant
- 郵箱:zhongchao.ustc@gmail.com
- 日期:August 5th, 2012
RTMFPManager
與RTMFPServer
同樣,繼承自Startable
。
class RTMFPManager : private Task, private Startable
在建構函式中將RTMFPServer
物件以引用方式傳入,用以初始化其_server
引用成員。
RTMFPManager(RTMFPServer& server)
: _server(server),
Task(server),
Startable("RTMFPManager") {
start();
}
. . .
RTMFPServer& _server;
在RTMFPManager
的建構函式中呼叫start()
成員函式,是從Startable
繼承而來的。然後會開啟一個新的名為RTMFPManager
的執行緒。然後響應到RTMFPManager::run()
函式。
void run() {
setPriority(Thread::PRIO_LOW);
while(sleep(2000)!=STOP)
waitHandle();
}
這裡要強調的是,這裡的setPriority
在Linux
環境下會設定失敗,可以參見我在Cumulus
在Github
上開啟的Issue #75
,其中就包括這裡的執行緒優先順序設定。
在這裡我們可以看到RTMFPManager
的handle(…)
中的sleep(…)
是每 2 秒一次,而這是對RTMFPServer
執行緒有影響的。還記得我說的RTMFPServer
執行緒的_wakeUpEvent
成員嗎?(在《OpenRTMFP/Cumulus Primer(22)RTMFPServer執行緒的啟動和等待》一文中)它的啟用就是在RTMFPManager
中進行的,所以這裡這個 2 秒是會影響到RTMFPServer
的主迴圈的等待時間的。
Startable::WakeUpType Startable::sleep(UInt32 timeout) {
if(_stop)
return STOP;
WakeUpType result = WAKEUP;
if(timeout>0) {
if(!_wakeUpEvent.tryWait(timeout))
result = TIMEOUT;
} else {
_wakeUpEvent.wait();
}
if(_stop)
return STOP;
return result;
}
你可以自行修改RTMFPServer
中sleep(...)
的引數,這樣就會呼叫_wakeUpEvent.tryWait(timeout)
了,按照指定的等待時間(即timeout
)來進行睡眠。
RTMFPManager
的作用是什麼呢?核心就在於它的handle
成員函式:
void handle() {
_server.manage();
}
這裡就會呼叫到RTMFPServer::manage()
,所以你要在閱讀RTMFPServer
原始碼時知道RTMFPServer::manage()
函式並不是在RTMFPServer
執行緒內執行的,而是RTMFPManager
執行緒內執行的。它的定義如下:
void RTMFPServer::manage() {
_handshake.manage();
_sessions.manage();
}
它實現對現有 Session 的一些管理,比如終止已經死掉的 Session。
-
轉載請註明來自柳大·Poechant(鍾超)的CSDN部落格:Blog.CSDN.net/Poechant
-
相關文章
- OpenRTMFP/Cumulus Primer(22)執行緒邏輯分析之一:RTMFPServer執行緒的啟動和等待執行緒Server
- OpenRTMFP/Cumulus Primer(19)獨立使用CumulusLib時的執行緒安全Bug執行緒
- OpenRTMFP/Cumulus Primer(4)CumulusServer啟動流程分析Server
- OpenRTMFP/Cumulus Primer(5)CumulusServer啟動流程分析(續)Server
- OpenRTMFP/Cumulus Primer(8)CumulusServer主程式主迴圈分析Server
- OpenRTMFP/Cumulus Primer(6)CumulusServer啟動流程分析(續2)Server
- OpenRTMFP/Cumulus Primer(7)CumulusServer啟動流程分析(續3)Server
- OpenRTMFP/Cumulus Primer(5)CumulusServer啟動流程分析(續1)Server
- OpenRTMFP/Cumulus Primer(7)CumulusServer 啟動流程分析(續3)Server
- OpenRTMFP/Cumulus Primer(16)AMF解析之AMFReader
- OpenRTMFP/Cumulus Primer(14)AMF解析之PacketReader/Writer
- OpenRTMFP/Cumulus Primer(18)AMF解析之AMFReader(續2)
- OpenRTMFP/Cumulus Primer(17)AMF解析之AMFReader(續1)
- OpenRTMFP/Cumulus Primer(9)AMF解析之BinaryReader/Writer
- OpenRTMFP/Cumulus Primer(1)入門介紹與部署CumulusServerServer
- 執行緒數目對資料庫的影響執行緒資料庫
- 執行緒池 execute() 的工作邏輯執行緒
- OpenRTMFP/Cumulus Primer(15)AMF解析之資料型別定義資料型別
- OpenRTMFP/Cumulus Primer(9)AMF 處理方式解析——BinaryReader/Writer
- 深入分析3種執行緒池執行任務的邏輯方法執行緒
- OpenRTMFP/Cumulus Primer(13)IO管理之區域性記憶體片記憶體
- 【效能】Oracle表並行對邏輯遷移後查詢效能的影響Oracle並行
- OpenRTMFP/Cumulus Primer(2)用Lua編寫HelloWorld應用擴充套件CumulusServer套件Server
- [02] 多執行緒邏輯程式設計執行緒程式設計
- cluster factor對執行計劃的影響
- OpenRTMFP/Cumulus Primer(21)經由伺服器的釋出/訂閱流程的關鍵點伺服器
- CSS3實現動畫不會影響主執行緒,JS實現動畫會影響主執行緒CSSS3動畫執行緒JS
- 【分析方法論】屬性對行為的影響分析
- 配置監聽器,建立執行緒定時執行業務邏輯執行緒行業
- 索引及排序對執行計劃的影響索引排序
- try catch 對程式碼執行的效能影響
- C++ Primer第五版之二:語言修訂對寫作策略的影響C++
- 執行緒安全的單態類會影響效能麼?執行緒
- kubebuilder operator的執行邏輯UI
- 計算機程式的思維邏輯 (78) - 執行緒池計算機執行緒
- oracle cardinality對於執行計劃的影響Oracle
- not-null約束對執行計劃的影響Null
- 主執行緒等待所有其他執行緒執行完畢,然後再繼續執行主執行緒的邏輯,有以下幾種方法可以實現:執行緒