在使用ACE_Message_Queue的时候通常需要有一个等待超时,我先前用的时候,等待超时总是无法生效,但后来改变了后就OK了。
事情是这样的。ACE中是这样说明的,那么这意味着什么?当然我觉得是只有绝对时间才能生效,事实也是如此。param timeout The absolute time the caller will wait until for a block to be dequeued.举例来说,使用
virtual
int
dequeue_head
(
ACE_Message_Block
*&
first_item
,
ACE_Time_Value
*
timeout
= 0);
接口,那么第二个参数就要注意了,通常如果超时5秒钟,可以这样做。
ACE_Time_Value
timeValue
=
ACE_OS
::
gettimeofday
();
ACE_Time_Value
test
(5);
timeValue
+=
test
;
g_sQueue
.
dequeue_head
(
msg
,&
timeValue
);
这样,这里就可以实现超时的等待。我想这一点不仅仅适用于Message Queue,在其他地方的等待超时处依然有效,具体请查阅ACE接口说明。
当需要清除ACE_Message_Queue中剩余的消息时,只需要调用flush().这个接口内部从尾到头释放所有消息,并且queue是锁住的,内部调用
ACE_Message_Block的release(),以保证不出现内存泄漏。