peakzhang 发表于 2007-12-13 23:37:50

使用ACE_Task消息对列,从消息对列中获取消息时产生死循环

我使用的是ACE5.5版本,使用以静态连接库Unicode编码的方式使用
代码如下

int CProtocolProcessTask::svc()
{
    ACE_Thread_Manager *mgr = this->thr_mgr();
    ACE_ASSERT(mgr != NULL);
    while(1)
    {
      //该服务被取消
      if(mgr->testcancel(mgr->thr_self()))
            return 0;

      ACE_Message_Block *mb = NULL;
      ACE_Time_Value tv(5);
      int iRet = this->getq(mb,&tv);
      if(iRet == -1 && errno == EWOULDBLOCK)
            continue;
      else
      {
            if(mb)
            {
                //协议逻辑入口
                ProtocolProcessMessage(mb);
                mb->release();
            }
      }
    }
    return 0;
}

主要是这两句话
       ACE_Time_Value tv(5);
      int iRet = this->getq(mb,&tv);
我设置的是5秒中的等待,可是this->getq(mb,&tv);从来不会等待进入iRet == -1 && errno == EWOULDBLOCK逻辑
我使用NULL会阻塞,不管tv(xx)中的数值有多大都会是这样,请高手给于解答,万分感谢

peakzhang 发表于 2007-12-13 23:37:59

ACE_Time_Value tv(5);
      int iRet = this->getq(mb,&tv);

你这里指定的相对时间,应该是绝对时间吧?你测试看看,我这里没编译器,也没有ACE代码..

ACE_Time_Value out_(xxx);有个获取时间的函数忘了,你找找看..

out_+=tv;

this->getq(mb,&out_);
页: [1]
查看完整版本: 使用ACE_Task消息对列,从消息对列中获取消息时产生死循环