消息块ACE_Message_Block结构的分析
- 包含一个指向带引用计数功能的ACE_Data_Block对象,该对象指向正在的数据缓冲区,这样可以在ACE_Message_Block对象之间灵活、高效地共享数据
- 一个或多个ACE_Message_Blocks对象可以连接起来组成一条链
- ACE_Message_Blocks对象可以连接起来组成一个双向的链表,进而形成消息队列
1 class ACE_Export ACE_Message_Block 2 { 3 public: 4 friend class ACE_Data_Block; 5 /******************************************************* 6 * 函数声明 7 *******************************************************/ 8 /// Pointer to beginning of next read. 9 /// 数据读指针,实际上是一个相对起始地址的偏移量 10 size_t rd_ptr_; 11 12 /// Pointer to beginning of next write. 13 /// 数据写指针,实际上是一个相对起始地址的偏移量 14 size_t wr_ptr_; 15 16 /// Priority of message. 17 /// 表示消息的优先级,用于优先级消息队列 18 unsigned long priority_; 19 20 #if defined (ACE_HAS_TIMED_MESSAGE_BLOCKS) 21 /// Execution time associated with the message. 22 /// 消息块的时间属性,用于实时消息队列 23 ACE_Time_Value execution_time_; 24 25 /// Absolute deadline time for message. 26 ACE_Time_Value deadline_time_; 27 #endif /* ACE_HAS_TIMED_MESSAGE_BLOCKS */ 28 29 // = Links to other ACE_Message_Block *s. 30 /// Pointer to next message block in the chain. 31 /// 消息链指针,多个消息块可以连在一起,构成一个消息块链 32 ACE_Message_Block *cont_; 33 34 /// Pointer to next message in the list. 35 /// 表示后一个消息指针 36 ACE_Message_Block *next_; 37 38 /// Pointer to previous message in the list. 39 /// 前一个消息指针 40 ACE_Message_Block *prev_; 41 42 /// Misc flags (e.g., DONT_DELETE and USER_FLAGS). 43 /// 是ACE_Data_Block删除标志,表示该实例下的data_block_是否要删除 44 ACE_Message_Block::Message_Flags flags_; 45 46 /// Pointer to the reference counted data structure that contains the 47 /// actual memory buffer. 48 /// 数据块指针 49 ACE_Data_Block *data_block_; 50 51 /// The allocator used to destroy ourselves when release is called 52 /// and create new message blocks on duplicate. 53 /// 消息块内存分配器 54 ACE_Allocator *message_block_allocator_; 55 56 private: 57 // = Disallow these operations for now (use <clone> instead). 58 ACE_Message_Block &operator= (const ACE_Message_Block &); 59 ACE_Message_Block (const ACE_Message_Block &); 60 };
- 每次写入数据时,写指针会偏移实际写入数据的长度,每次读出数据时,读指针会偏移实际读出数据的长度。它们的差就是当前消息块中含有的数据量。
- ACE_Message_Block和ACE_Data_Block结构关系如图所示