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,(查找块的最快方法, ...
随机推荐
- 【Pollard-rho算法】【DFS】poj2429 GCD & LCM Inverse
题意:给你一两个数m和n,它们分别是某对数A,B的gcd和lcm,让你求出一对使得A+B最小的A,B. n/m的所有质因子中,一定有一部分是只在A中的,另一部分是只在B中的. 于是对n/m质因子分解后 ...
- php上传文件常见问题(基础)
既然上一篇文章<php上传中文文件文件名乱码问题>遇到了文件上传的问题,干脆把php上传文件时经常碰到的几个问题总结一下吧,以后用到时不用再去找了. 1.先做个最简单的上传文件 <h ...
- LINUX 高可用群集之 ~Corosync~
Corosync:它属于OpenAIS(开放式应用接口规范)中的一个项目corosync一版本中本身不具 备投票功能,到了corosync 2.0之后引入了votequorum子系统也具备了投票功能了 ...
- 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX
https://www.v2ex.com/t/279405 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX pip 更新到最新 sudo apt inst ...
- object-c的http post请求之 ASIFormDataRequest使用
ASIHTTPRequest类库中的ASIFormDataRequest是实现HTTP协议中的处理POST表单的很好的类库.使用起来非常简单. 在说明之前先需要了解HTTP请求的Get和Post方法. ...
- 在Visual Studio项目中根据系统平台自动引用32或64位的DLL
最近在使用Noesis.Javascript.dll,但是这个DLL是有X86与X64二种版本的,我自己的电脑是64位的,但是别人的电脑是32位的.所以在别人那里使用的时候出了问题. 在VS里怎么引用 ...
- js:对象的创建(为prototype做铺垫)
/** *在js中并不存在类,所以能够直接通过Object来创建对象,可是使用这样的方式创建有一 *弊端:因为没有类的约束,无法实现对象的反复利用,而且没有一种规范约定,在操作时easy带来问题. ...
- 固定的价格就意味着背叛——《practices of an agile developper》
“对这个项目,我们必须要有固定的报价.虽然我们还不清楚项目的具体情况,但仍要有一个报价.到星期一,我需要整个团队的评估,并且我们必须要在年末交付整个项目.” Venkat & Andy 提出了 ...
- iOS:转载FMDB文档
来自会员pengtao的分享:(原文:https://github.com/ccgus/fmdb) 由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此同时,把SQL ...
- Qt 事件处理机制 (上篇)
本篇来介绍Qt 事件处理机制 .深入了解事件处理系统对于每个学习Qt人来说非常重要,可以说,Qt是以事件驱动的UI工具集. 大家熟知Signals/Slots在多线程的实现也依赖于Qt的事件处理机制. ...