这个线程该如何退出
class CommandHandler: public ACE_Task_Base{
public:
virtual int svc(void)
{
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;
}
return nRet;
}
};
CClientMessage::CClientMessage(void)
{
m_timbreath.begin_count();
m_breath_sec = 1000;
//m_user.user_state(EN_USER_NULL);
//MyTimerHandler * timer = new MyTimerHandler ();
ACE_Time_Value initialDelay (1);//初始延时时间
ACE_Time_Value interval (1); //间隔时间
ACE_Reactor::instance()->schedule_timer (this,
0,
initialDelay,
interval);
//ACE_Reactor::instance ()->run_reactor_event_loop ();
int nReturn = m_cmd_handle.activate(THR_NEW_LWP|THR_JOINABLE,1);
ACE_ASSERT(nReturn==0);
}
class CommandHandler: public ACE_Task_Base
{
public:
virtual int svc(void)
{
int nRet = 0;
/* select_reactor 可能在阻塞过程中被信号中断(errno=4<EINTR>) */
while ( _flag )
{
if ( 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;
}
}
return nRet;
}
};
run_reactor_event_loop()本身就会开一个线程来调用handle_events。
建议不要使用这么复杂的线程退出判断。很有可能发生死锁啊。
线程退出的判断条件越简单越好。
向python编程思路学习。简单为美!
页:
[1]