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

  • 相关阅读:
    win2K/win2003终端服务器超出最大允许连接数解决之道
    DOM与SAX读取xml文件例程
    ubuntu安装配置telnet
    SCTP 简介
    groovy 脚本中文乱码问题解决
    编码问题研究
    gvim支持utf8
    ctags使用方法
    我家猫病了。。
    小朋友搞笑造句
  • 原文地址:https://www.cnblogs.com/zl1991/p/7651449.html
Copyright © 2011-2022 走看看