zhuzhenlei 发表于 2010-9-27 08:55:17

ACE_OS::last_error()的问题

if(m_stream.recv(buf,sizeof(buf),&timeout) <= 0 )
    {                        
      if(ACE_OS::last_error() != ETIME)
      {
            for(;;)
            {
                ACE_Thread_Manager* mgr = this->thr_mgr();
                if (mgr->testcancel(mgr->thr_self()))
                {               
                  return 0;
                }
                else if(Connect() == -1)
                  Sleep(3*1000);
                else
                  break;
            }               
      }            
    }debug模式下如果没有收到数据但是连接正常ACE_OS::last_error()会返回ETIME
但是release模式下不会返回ETIME,想要在release模式下也返回超时,该怎么做?谢谢诸位

freeeyes 发表于 2010-9-27 09:56:53

你可以换一种判断方法,比如这样。
if(nDataLen <= 0)
      {
                m_u4CurrSize = 0;
                uint32 u4Error = (uint32)errno;
      }

modern 发表于 2010-9-27 16:38:09

不要用(mgr->testcancel(mgr->thr_self()))这种方式检查线程是否退出,
他会遍历ACE_Thread_Manager管理的所有task指针,代价非常重。
页: [1]
查看完整版本: ACE_OS::last_error()的问题