作者:峰的紫色摩天轮 | 来源:互联网 | 2023-10-12 20:06
原帖:http:blog.chinaunix.netspace.php?uid9162199&doblog&cuid2436042ACE_Reactor::instance
原帖:http://blog.chinaunix.net/space.php?uid=9162199&do=blog&cuid=2436042
ACE_Reactor::instance()->run_reactor_event_loop() 放在主线程中,定时器就正常;放在子线程中,定时器就不起作用。
解决方法:
set the owner of the reactor to the identity of the thread that runs the event loop
int svc(){
int nRet = 0;
/* select_reactor 可能在阻塞过程中被信号中断(errno=4) */
while(ACE_Reactor::instance()->reactor_event_loop_done() == 0)
{
ACE_Reactor::instance()->owner( ACE_OS::thr_self() );
nRet = ACE_Reactor::instance()->run_reactor_event_loop();
if(nRet >= 0)
break;
}
}
原因引申阅读:LF模式 Leader/Follower
http://www.kircher-schwanninger.de/michael/publications/lf.pdf
http://www.cse.wustl.edu/~schmidt/PDF/reactor-siemens.pdf
http://www.cse.wustl.edu/~schmidt/PDF/proactor.pdf
http://hi.baidu.com/sodarfish/blog/item/43d46fc4e5040fc538db49cc.html