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模式下也返回超时,该怎么做?谢谢诸位 你可以换一种判断方法,比如这样。
if(nDataLen <= 0)
{
m_u4CurrSize = 0;
uint32 u4Error = (uint32)errno;
} 不要用(mgr->testcancel(mgr->thr_self()))这种方式检查线程是否退出,
他会遍历ACE_Thread_Manager管理的所有task指针,代价非常重。
页:
[1]