找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5034|回复: 2

这个线程该如何退出

[复制链接]
发表于 2013-1-15 13:50:49 | 显示全部楼层 |阅读模式
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);
}
发表于 2013-1-15 17:18:34 | 显示全部楼层
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;
         }
};


发表于 2013-2-11 23:38:43 | 显示全部楼层
run_reactor_event_loop()本身就会开一个线程来调用handle_events。
建议不要使用这么复杂的线程退出判断。很有可能发生死锁啊。

线程退出的判断条件越简单越好。

向python编程思路学习。简单为美!
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-29 11:34 , Processed in 0.011568 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表