#include <ace/Message_Queue.h> template<ACE_SYNCH_1> class ACE_Message_Queue {
public:
enum { DEFAULT_LWM = 0, DEFAULT_HWM = 16 * 1024, WAS_ACTIVE = 1, WAS_INACTIVE = 2 };ACE_Message_Queue ( size_t hwm = DEFAULT_HWM, size_t lwm = DEFAULT_LWM );
int open (size_t hwm = DEFAULT_HWM, size_t lwm = DEFAULT_LWM);
int close (void);
~ACE_Message_Queue (void);
int peek_dequeue_head ( ACE_Message_Block *&first_item, ACE_Time_Value *tv = 0 );
int enqueue (ACE_Message_Block *new_item, ACE_Time_Value *tv = 0);
int enqueue_tail ( ACE_Message_Block *new_item, ACE_Time_Value *tv = 0 );
int enqueue_head ( ACE_Message_Block *new_item, ACE_Time_Value *tv = 0 );
int dequeue_head ( ACE_Message_Block *&first_item, ACE_Time_Value *tv = 0 );
int is_full (void);
int is_empty (void);
size_t message_bytes (void);
size_t message_count (void);
size_t high_water_mark (void);
void high_water_mark (size_t hwm);
size_t low_water_mark (void);
void low_water_mark (size_t lwm);
int deactivate (void);
int activate (void);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
protected:
int enqueue_i (ACE_Message_Block *new_item);
int enqueue_tail_i (ACE_Message_Block *new_item);
int enqueue_head_i (ACE_Message_Block *new_item);
int dequeue_head_i (ACE_Message_Block *&first_item);
int is_full_i (void);
int is_empty_i (void);
int deactivate_i (void);
int activate_i (void);
ACE_Message_Block *head_;
ACE_Message_Block *tail_;
int low_water_mark_;
int high_water_mark_;
int cur_bytes_;
int cur_count_;
int deactivated_;
ACE_SYNCH_MUTEX lock_;
ACE_SYNCH_CONDITION notempty_cond_;
ACE_SYNCH_CONDITION notfull_cond_;
};
ACE_SYNCH_1
is
ACE_MT_SYNCH then all operations are thread-safe. Otherwise,
if it's ACE_NULL_SYNCH
then there's no locking overhead.
ACE_Message_Queue (
size_t hwm = DEFAULT_HWM,
size_t lwm = DEFAULT_LWM
);
int open (size_t hwm = DEFAULT_HWM, size_t lwm = DEFAULT_LWM);
int close (void);
~ACE_Message_Queue (void);
int peek_dequeue_head (
ACE_Message_Block *&first_item,
ACE_Time_Value *tv = 0
);
int enqueue (ACE_Message_Block *new_item, ACE_Time_Value *tv = 0);
ACE_Message_Block *
into the Message_Queue
in
accordance with its msg_priority
(0 is lowest priority).
Returns -1 on failure, else the number of items still on the
queue.
int enqueue_tail (
ACE_Message_Block *new_item,
ACE_Time_Value *tv = 0
);
ACE_Message_Block *
at the end of the queue.
Returns -1 on failure, else the number of items still on the
queue.
int enqueue_head (
ACE_Message_Block *new_item,
ACE_Time_Value *tv = 0
);
ACE_Message_Block *
at the head of the queue.
Returns -1 on failure, else the number of items still on the
queue.
int dequeue_head (
ACE_Message_Block *&first_item,
ACE_Time_Value *tv = 0
);
ACE_Message_Block *
at the head of the
queue. Returns -1 on failure, else the number of items still on
the queue.
int is_full (void);
int is_empty (void);
size_t message_bytes (void);
size_t message_count (void);
size_t high_water_mark (void);
void high_water_mark (size_t hwm);
size_t low_water_mark (void);
void low_water_mark (size_t lwm);
int deactivate (void);
errno
==
ESHUTDOWN. Returns WAS_INACTIVE if queue was inactive before the
call and WAS_ACTIVE if queue was active before the call.
int activate (void);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
int enqueue_i (ACE_Message_Block *new_item);
ACE_Message_Block *
in accordance with its priority.
int enqueue_tail_i (ACE_Message_Block *new_item);
ACE_Message_Block *
at the end of the queue.
int enqueue_head_i (ACE_Message_Block *new_item);
ACE_Message_Block *
at the head of the queue.
int dequeue_head_i (ACE_Message_Block *&first_item);
ACE_Message_Block *
at the head of the
queue.
int is_full_i (void);
int is_empty_i (void);
int deactivate_i (void);
int activate_i (void);
ACE_Message_Block *head_;
ACE_Message_Block *tail_;
int low_water_mark_;
int high_water_mark_;
int cur_bytes_;
int cur_count_;
int deactivated_;
ACE_SYNCH_MUTEX lock_;
ACE_SYNCH_CONDITION notempty_cond_;
ACE_SYNCH_CONDITION notfull_cond_;