ACE-Task结构介绍(二)——消息块ACE_Message_Block结构的分析
消息块ACE_Message_Block结构的分析
- 包含一个指向带引用计数功能的ACE_Data_Block对象,该对象指向正在的数据缓冲区,这样可以在ACE_Message_Block对象之间灵活、高效地共享数据
- 一个或多个ACE_Message_Blocks对象可以连接起来组成一条链
- ACE_Message_Blocks对象可以连接起来组成一个双向的链表,进而形成消息队列
class ACE_Export ACE_Message_Block
{
public:
friend class ACE_Data_Block;
/*******************************************************
* 函数声明
*******************************************************/
/// Pointer to beginning of next read.
/// 数据读指针,实际上是一个相对起始地址的偏移量
size_t rd_ptr_; /// Pointer to beginning of next write.
/// 数据写指针,实际上是一个相对起始地址的偏移量
size_t wr_ptr_; /// Priority of message.
/// 表示消息的优先级,用于优先级消息队列
unsigned long priority_; #if defined (ACE_HAS_TIMED_MESSAGE_BLOCKS)
/// Execution time associated with the message.
/// 消息块的时间属性,用于实时消息队列
ACE_Time_Value execution_time_; /// Absolute deadline time for message.
ACE_Time_Value deadline_time_;
#endif /* ACE_HAS_TIMED_MESSAGE_BLOCKS */ // = Links to other ACE_Message_Block *s.
/// Pointer to next message block in the chain.
/// 消息链指针,多个消息块可以连在一起,构成一个消息块链
ACE_Message_Block *cont_; /// Pointer to next message in the list.
/// 表示后一个消息指针
ACE_Message_Block *next_; /// Pointer to previous message in the list.
/// 前一个消息指针
ACE_Message_Block *prev_; /// Misc flags (e.g., DONT_DELETE and USER_FLAGS).
/// 是ACE_Data_Block删除标志,表示该实例下的data_block_是否要删除
ACE_Message_Block::Message_Flags flags_; /// Pointer to the reference counted data structure that contains the
/// actual memory buffer.
/// 数据块指针
ACE_Data_Block *data_block_; /// The allocator used to destroy ourselves when release is called
/// and create new message blocks on duplicate.
/// 消息块内存分配器
ACE_Allocator *message_block_allocator_; private:
// = Disallow these operations for now (use <clone> instead).
ACE_Message_Block &operator= (const ACE_Message_Block &);
ACE_Message_Block (const ACE_Message_Block &);
};
- 每次写入数据时,写指针会偏移实际写入数据的长度,每次读出数据时,读指针会偏移实际读出数据的长度。它们的差就是当前消息块中含有的数据量。
- ACE_Message_Block和ACE_Data_Block结构关系如图所示

ACE-Task结构介绍(二)——消息块ACE_Message_Block结构的分析的更多相关文章
- (3.1)mysql基础深入——mysql二进制与源码目录结构介绍
(3.1)mysql基础深入——mysql二进制与源码目录结构介绍 关键字:二进制目录结构,源码目录结构(编译安装目录结构) 1.二进制安装程序目录结构 [1] BIN -- mysql的可执行文件( ...
- Linux设备驱动--块设备(二)之相关结构体
上回最后面介绍了相关数据结构,下面再详细介绍 块设备对象结构 block_device 内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区.如果该结构代表一个分区,则其成 ...
- Linux设备驱动--块设备(二)之相关结构体(转)
上回最后面介绍了相关数据结构,下面再详细介绍 块设备对象结构 block_device 内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区.如果该结构代表一个分区,则其成 ...
- 二、VUE项目BaseCms系列文章:项目目录结构介绍
一. 目录结构截图 二. 目录结构说明 - documents 存放项目相关的文档文件 - api api 数据接口目录 - assets 资源文件目录 - components ...
- V4L2学习(二)结构介绍
v4l2_device v4l2_device在v4l2框架中充当所有v4l2_subdev的父设备,管理着注册在其下的子设备.以下是v4l2_device结构体原型(去掉了无关的成员): struc ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- 上门洗车APP --- Androidclient开发 之 项目结构介绍
上门洗车APP --- Androidclient开发 之 项目结构介绍 前言 尽管公司项目较紧,但还是抽空给大家继续更新. o_O"~ 欢迎大家的关注,非常高兴和大家共同学习.前面给大家分 ...
- Oracle数据库基础入门《二》Oracle内存结构
Oracle数据库基础入门<二>Oracle内存结构 Oracle 的内存由系统全局区(System Global Area,简称 SGA)和程序全局区(Program Global Ar ...
- [转帖]B树索引和位图索引的结构介绍
B树索引和位图索引的结构介绍 http://blog.itpub.net/12679300/viewspace-1174236/ 一 前言:? ROWID:包含键值的行的行ID,(查找块的最快方法, ...
随机推荐
- padding Oracle attack(填充Oracle攻击)
最近学习到一种老式的漏洞,一种基于填充字节的漏洞.就想记录下来,早在2010年的blackhat大会上,就介绍了padding Oracle漏洞,并公布了ASP.NET存在该漏洞.2011年又被评选为 ...
- spring核心及常用技术
一.核心内容 1.依赖注入(控制反转) 1)什么是依赖注入 spring将实例的创建交给spring容器(BeanFactory或ApplicationContext)管理,当实例创建后通过设值或构造 ...
- java 环境变量设定
1 新建系统环境 新建 弹出“新建系统变量”对话框,分别输入变量名“JAVA_HOME”和变量值(java安装路径)“C:\Java\jdk1.7.0_03”,其中变量值是笔者的J ...
- 中国剩余定理 hdu 3579
HDU 3579 Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- PHP -- 函数基础入门
FROM : http://www.cnblogs.com/kym/archive/2010/02/14/1668300.html, http://www.cnblogs.com/kym/archiv ...
- Powerdesigner打开工程提示打印错误 解决方法
在使用PowerDesigner打开工程时, 提示打印错误的问题,具体错误信息提示如下: 在您可以执行与打印机有关的任务(例如页面设置或打印一个文档)之前,您必须已经安装打印机.您想现在安装打印机么? ...
- 使用 JMeter 完成常用的压力测试
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- Appium+python自动化17-启动iOS模拟器APP源码案例
前言 上一篇已经可以启动iOS模拟器上的safari浏览器了,启动app比启动浏览器要复杂一点,本篇以github上的源码为案例详细介绍如何启动iOS模拟器的app 一.clone源码 1.githu ...
- GO -- 一个经验
加锁要在有用的的上下文再加锁, 不要加的范围多了, 否则被锁住.
- PhD Positions opening at University of Nevada, Reno (Wireless Networking / Cognitive Radio / Wireless Security)
PhD Positions opening at University of Nevada, RenoDept. of Computer Science and Engineering Researc ...