默认采用ACE_Message_Queue<ACE_SYNCH> 保存数据
1. ACE_Method_Request * ACE_Activation_Queue::dequeue (ACE_Time_Value *tv = 0);
如果tv没有值;则阻塞 如果tv有值,超时返回EWOULDBLOCK;返回0,错误
-----------------------------------------------------------------------------------------------------
ACE_Message_Queue 采用双向链表组织结构
1.指定队列是否同步化(ACE_MT_SYNCH 、ACE_NULL_SYNCH)
2.流控
统计所有block的字节总数cur_bytes_, 在新消息放到队列之前,判断字节总数是否高于高水位标(缺省高低水位标为16K),如果高:
如果队列是“同步化”的,调用线程将会阻塞,直到队列中的字节总数降至低水位标以下,或超时。
如果队列是“非同步化”的,errno被设置为EWOULDBLOCK,调用返回-1。
3.按照优先级出队 dequeue_prio,从尾部开始查找一个最高的优先级消息,代码如下:
优先级入队时从尾部开始遍历比较,如果优先级比较高,就一直往前查找,到头为止。
优先级入队和优先级出队用一个即可。
3.close停止队列并清空,flush仅清空队列。
4.任何入队操作,都会触发notify(),ACE_Message_Queue的子类,可以重载