找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4535|回复: 4

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

[复制链接]
发表于 2008-5-17 15:44:49 | 显示全部楼层 |阅读模式
反应式的connector.
在open里activate().
在handle_input中putq.
在svc()里头:
while(1)
{
    ACE_Message_Block* mblk = 0;
    if( getq() == -1 )
    {
        return -1;
    }
    else
   //其它处理.
}

连接上时在svc处理完else下面的处理后再次回到getq时不阻塞, 直接返回-1.
是什么原因引起的呢.
 楼主| 发表于 2008-5-17 16:01:21 | 显示全部楼层
发现了个原因,不过不知道为什么.
My_Connector: public ACE_Task<ACE_NULL_SYNCH>
时getq不阻塞.
My_Connector: public ACE_Task<ACE_MT_SYNCH>
时getq阻塞。
发表于 2008-5-17 19:51:52 | 显示全部楼层
ACE_MT_SYNCH里面带上了线程同步。在这个方面去想想。
发表于 2008-5-20 11:33:24 | 显示全部楼层
pthread_cont_wait
发表于 2008-5-20 17:29:24 | 显示全部楼层
getq 返回-1时,你需要判断一下错误类型,然后调用continue,而不是直接return -1
if ((getq() == -1)&& (errno == EWOULDBLOCK)) {
     continue;
}
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-23 19:03 , Processed in 0.026912 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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