jolly_w23 发表于 2008-5-17 15:44:49

getq 返回-1. 队列空的,怎么不阻塞啊.

反应式的connector.
在open里activate().
在handle_input中putq.
在svc()里头:
while(1)
{
    ACE_Message_Block* mblk = 0;
    if( getq() == -1 )
    {
      return -1;
    }
    else
   //其它处理.
}

连接上时在svc处理完else下面的处理后再次回到getq时不阻塞, 直接返回-1.
是什么原因引起的呢.

jolly_w23 发表于 2008-5-17 16:01:21

发现了个原因,不过不知道为什么.
My_Connector: public ACE_Task<ACE_NULL_SYNCH>
时getq不阻塞.
My_Connector: public ACE_Task<ACE_MT_SYNCH>
时getq阻塞。

winston 发表于 2008-5-17 19:51:52

ACE_MT_SYNCH里面带上了线程同步。在这个方面去想想。

okmmno1 发表于 2008-5-20 11:33:24

pthread_cont_wait

Joe 发表于 2008-5-20 17:29:24

getq 返回-1时,你需要判断一下错误类型,然后调用continue,而不是直接return -1
if ((getq() == -1)&& (errno == EWOULDBLOCK)) {
   continue;
}
页: [1]
查看完整版本: getq 返回-1. 队列空的,怎么不阻塞啊.