OpenRTMFP/Cumulus Primer(7)CumulusServer啟動流程分析(續3)
OpenRTMFP/Cumulus Primer(7)CumulusServer 啟動流程分析(續3)
- 作者:柳大·Poechant(鍾超)
- 部落格:Blog.CSDN.net/Poechant
- 郵箱:zhongchao.ustc#gmail.com (# -> @)
- 日期:April 14th, 2012
1 回顧一下啟動過程
- 從 main.cpp 的啟動入口
main()
函式開始,建立Server
物件並啟動(呼叫start()
函式)。 -
Server::start()
中呼叫其父類(RTMFPServer
)的父類(Startable
)的方法Startable::start()
開啟執行緒。 - 呼叫
Startable::start()
函式後,開啟線城時傳入的引數為*this
,所以就會執行Startable::run()
;
2 RTMFPServer::prerun()
Startable::run()
呼叫Startable::prerun()
函式,但這個函式被RTMFPServer
覆蓋,所以會執行RTMFPServer::prerun()
,其原始碼如下:
bool RTMFPServer::prerun() {
NOTE("RTMFP server starts on %u port",_port);
如果CumulusEdge
:
if (_edgesPort>0)
NOTE("RTMFP edges server starts on %u port",_edgesPort);
bool result = true;
try {
onStart();
執行執行緒:
result = Startable::prerun();
處理異常:
} catch(Exception& ex) {
FATAL("RTMFPServer : %s",ex.displayText().c_str());
} catch (exception& ex) {
FATAL("RTMFPServer : %s",ex.what());
} catch (...) {
FATAL("RTMFPServer unknown error");
}
如果跳出了,則終止執行:
onStop();
NOTE("RTMFP server stops");
return result;
}
該函式內部又會呼叫父類的 Startable::prerun() 函式,該函式呼叫:
virtual void Startable::run(const volatile bool& terminate) = 0;
它是一個純虛擬函式,由 RTMFPServer 實現。
3 Startable::prerun()
Startable::prerun()
會呼叫void run(const volatile bool& terminate)
方法,該方法被RTMFPServer
覆蓋了。
bool Startable::prerun() {
run(_terminate);
return !_terminate;
}
4 RTMFPServer::run(const volatile bool& terminate)
RTMFPServer
覆蓋Startable
的run(const volatile bool &terminate)
方法。
void RTMFPServer::run(const volatile bool& terminate) {
...
}
-
轉載請註明來自柳大的CSDN部落格:Blog.CSDN.net/Poechant
-
相關文章
- OpenRTMFP/Cumulus Primer(7)CumulusServer 啟動流程分析(續3)Server
- OpenRTMFP/Cumulus Primer(5)CumulusServer啟動流程分析(續)Server
- OpenRTMFP/Cumulus Primer(6)CumulusServer啟動流程分析(續2)Server
- OpenRTMFP/Cumulus Primer(5)CumulusServer啟動流程分析(續1)Server
- OpenRTMFP/Cumulus Primer(4)CumulusServer啟動流程分析Server
- OpenRTMFP/Cumulus Primer(8)CumulusServer主程式主迴圈分析Server
- OpenRTMFP/Cumulus Primer(1)入門介紹與部署CumulusServerServer
- OpenRTMFP/Cumulus Primer(2)用Lua編寫HelloWorld應用擴充套件CumulusServer套件Server
- OpenRTMFP/Cumulus Primer(18)AMF解析之AMFReader(續2)
- OpenRTMFP/Cumulus Primer(17)AMF解析之AMFReader(續1)
- OpenRTMFP/Cumulus Primer(16)AMF解析之AMFReader
- OpenRTMFP/Cumulus Primer(14)AMF解析之PacketReader/Writer
- OpenRTMFP/Cumulus Primer(22)執行緒邏輯分析之一:RTMFPServer執行緒的啟動和等待執行緒Server
- OpenRTMFP/Cumulus Primer(9)AMF解析之BinaryReader/Writer
- OpenRTMFP/Cumulus Primer(21)經由伺服器的釋出/訂閱流程的關鍵點伺服器
- OpenRTMFP/Cumulus Primer(15)AMF解析之資料型別定義資料型別
- OpenRTMFP/Cumulus Primer(9)AMF 處理方式解析——BinaryReader/Writer
- OpenRTMFP/Cumulus Primer(13)IO管理之區域性記憶體片記憶體
- OpenRTMFP/Cumulus Primer(23)執行緒邏輯分析之二:RTMFPManager對RTMFPServer的影響執行緒Server
- OpenRTMFP/Cumulus Primer(19)獨立使用CumulusLib時的執行緒安全Bug執行緒
- Activity啟動流程分析
- activity 啟動流程分析
- Unbound啟動流程分析
- FlutterApp啟動流程分析FlutterAPP
- nodejs啟動流程分析NodeJS
- Flutter啟動流程原始碼分析Flutter原始碼
- Linux:uboot啟動流程分析Linuxboot
- apiserver原始碼分析——啟動流程APIServer原始碼
- Activity啟動流程原始碼分析原始碼
- Android應用啟動流程分析Android
- Flutter系列三:Flutter啟動流程分析Flutter
- Tomcat原始碼分析--啟動流程Tomcat原始碼
- JobTracker啟動流程原始碼級分析原始碼
- Tomcat 7 啟動分析(一)啟動指令碼Tomcat指令碼
- 以太坊原始碼分析(39)geth啟動流程分析原始碼
- Android Activity啟動流程原始碼分析Android原始碼
- SpringBoot啟動流程分析原理(一)Spring Boot
- Android原始碼分析:Activity啟動流程Android原始碼