OpenRTMFP/Cumulus Primer(23)线程逻辑分析之二:RTMFPManager对RTMFPServer的影响
2012-08-05 01:58
821 查看
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线程的启动和等待
- OpenRTMFP/Cumulus Primer(4)CumulusServer启动流程分析
- OpenRTMFP/Cumulus Primer(5)CumulusServer启动流程分析(续1)
- OpenRTMFP/Cumulus Primer(6)CumulusServer启动流程分析(续2)
- OpenRTMFP/Cumulus Primer(7)CumulusServer 启动流程分析(续3)
- OpenRTMFP/Cumulus Primer(5)CumulusServer启动流程分析(续1)
- OpenRTMFP/Cumulus Primer(8)CumulusServer主进程主循环分析
- OpenRTMFP/Cumulus Primer(6)CumulusServer启动流程分析(续2)
- OpenRTMFP/Cumulus Primer(4)CumulusServer启动流程分析
- OpenRTMFP/Cumulus Primer(7)CumulusServer启动流程分析(续3)
- OpenRTMFP/Cumulus Primer(8)CumulusServer主进程主循环分析
- OpenRTMFP/Cumulus Primer(20)Cumulus的一个线程启动 Bug
- OpenRTMFP/Cumulus Primer(2)用Lua编写HelloWorld应用扩展CumulusServer
- OpenRTMFP/Cumulus Primer(2)用Lua编写HelloWorld应用扩展CumulusServer
- OpenRTMFP/Cumulus Primer 入门(3)图解CumulusEdge原理
- OpenRTMFP/Cumulus Primer(17)AMF解析之AMFReader(续1)
- OpenRTMFP/Cumulus Primer(3)图解CumulusEdge原理
- OpenRTMFP/Cumulus Primer(12)IO管理之IO流(续)
- OpenRTMFP/Cumulus Primer(15)AMF解析之数据类型定义
- OpenRTMFP/Cumulus Primer(18)AMF解析之AMFReader(续2)