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结构关系如图所示

 

posted @   鸭子船长  阅读(304)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示