欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 ACE-Task结构介绍(二)——消息块ACE_Message_Block结构的分析 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

    总结

    以上是生活随笔为你收集整理的ACE-Task结构介绍(二)——消息块ACE_Message_Block结构的分析的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。