找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3883|回复: 1

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

[复制链接]
发表于 2007-12-13 23:37:50 | 显示全部楼层 |阅读模式
我使用的是ACE5.5版本,使用以静态连接库Unicode编码的方式使用
代码如下
  1. int CProtocolProcessTask::svc()
  2. {
  3.     ACE_Thread_Manager *mgr = this->thr_mgr();
  4.     ACE_ASSERT(mgr != NULL);
  5.     while(1)
  6.     {
  7.         //该服务被取消
  8.         if(mgr->testcancel(mgr->thr_self()))
  9.             return 0;
  10.         ACE_Message_Block *mb = NULL;
  11.         ACE_Time_Value tv(5);
  12.         int iRet = this->getq(mb,&tv);
  13.         if(iRet == -1 && errno == EWOULDBLOCK)
  14.             continue;
  15.         else
  16.         {
  17.             if(mb)
  18.             {
  19.                 //协议逻辑入口
  20.                 ProtocolProcessMessage(mb);
  21.                 mb->release();
  22.             }
  23.         }
  24.     }
  25.     return 0;
  26. }
复制代码
主要是这两句话
       ACE_Time_Value tv(5);
        int iRet = this->getq(mb,&tv);
我设置的是5秒中的等待,可是this->getq(mb,&tv);从来不会等待进入iRet == -1 && errno == EWOULDBLOCK逻辑
我使用NULL会阻塞,不管tv(xx)中的数值有多大都会是这样,请高手给于解答,万分感谢
 楼主| 发表于 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_);
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-5-20 06:59 , Processed in 0.023507 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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