ACE-Task结构介绍(二)——消息块ACE_Message_Block结构的分析

消息块ACE_Message_Block结构的分析

  1. 包含一个指向带引用计数功能的ACE_Data_Block对象,该对象指向正在的数据缓冲区,这样可以在ACE_Message_Block对象之间灵活、高效地共享数据
  2. 一个或多个ACE_Message_Blocks对象可以连接起来组成一条链
  3. 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 };
  1. 每次写入数据时,写指针会偏移实际写入数据的长度,每次读出数据时,读指针会偏移实际读出数据的长度。它们的差就是当前消息块中含有的数据量。
  2. ACE_Message_Block和ACE_Data_Block结构关系如图所示

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值