在使用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(),以保证不出现内存泄漏。
本文详细介绍了在ACE库中使用ACE_Message_Queue时如何正确设置等待超时,包括如何通过绝对时间来确保超时功能正常工作。此外,还介绍了如何通过调用flush()方法来清除队列中的所有剩余消息。

1337

被折叠的 条评论
为什么被折叠?



