原帖: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<EINTR>) */
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
本文深入探讨了在不同线程环境下运行事件循环的影响,指出将Reactor::instance()->run_reactor_event_loop()置于主线程能确保定时器正常工作,而放入子线程会导致定时器失效的问题。并通过引用文献解释了Leader/Follower模式(LF模式)在系统设计中的应用,为解决此类线程间通信与同步问题提供理论依据。

4463

被折叠的 条评论
为什么被折叠?



