ACE_Message_Queue的超时设置和消息清除

本文详细介绍了在ACE库中使用ACE_Message_Queue时如何正确设置等待超时,包括如何通过绝对时间来确保超时功能正常工作。此外,还介绍了如何通过调用flush()方法来清除队列中的所有剩余消息。
    在使用ACE_Message_Queue的时候通常需要有一个等待超时,我先前用的时候,等待超时总是无法生效,但后来改变了后就OK了。

       事情是这样的。ACE中是这样说明的,那么这意味着什么?当然我觉得是只有绝对时间才能生效,事实也是如此。param timeout The absolute time the caller will wait until for a block to be dequeued.举例来说,使用

virtualintdequeue_head (ACE_Message_Block *&first_item,ACE_Time_Value *timeout = 0);
接口,那么第二个参数就要注意了,通常如果超时5秒钟,可以这样做。
ACE_Time_ValuetimeValue = ACE_OS::gettimeofday();
ACE_Time_Valuetest(5);
timeValue += test;
g_sQueue.dequeue_head(msg,&timeValue);
这样,这里就可以实现超时的等待。我想这一点不仅仅适用于Message Queue,在其他地方的等待超时处依然有效,具体请查阅ACE接口说明。
 
当需要清除ACE_Message_Queue中剩余的消息时,只需要调用flush().这个接口内部从尾到头释放所有消息,并且queue是锁住的,内部调用ACE_Message_Block的release(),以保证不出现内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值