zoukankan      html  css  js  c++  java
  • 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结构关系如图所示

  • 相关阅读:
    什么是系统打开文件表?
    为什么Unix只允许对非目录文件实行勾链?
    在Unix系统中,主存索引节点和辅存索引节点从内容上比较有什么不同,为什么要设置主存索引节点?
    Unix系统的文件目录项的内容是什么,这样处理的好处是什么?
    Unix系统使用的地址索引结构有什么特点?
    Unix文件系统的主要特点是什么?
    什么是打开文件操作,什么关闭文件操作,引入这两个操作的目的是什么?
    在非洲运营互联网系统-基础建设
    这一年在非洲(4年一轮回总结完结)
    4年一轮回(后半部)
  • 原文地址:https://www.cnblogs.com/zl1991/p/7651449.html
Copyright © 2011-2022 走看看