本文参考http://www.cnblogs.com/TianFang/archive/2006/12/30/607960.html

1. ACE_Message_Block 的length() 返回的是写指针和读指针之间的字符数量。如

lb->wr_ptr(10);

lb->rd_ptr(20);

lb->length();   // -10

2. ACE_Message_Block 下面的用法会和数组共用同一个内存块。释放时不释放数组。

ACE_TCHAR buffer[100];
ACE_Message_Block *b2 = new ACE_Message_Block(buffer,ACE_OS::strlen(buffer));
ACE_OS::sprintf(b2->wr_ptr(),"%s","hello word");
ACE_OS::printf("%s\n",b2->rd_ptr());     --->hello word
ACE_OS::printf("%s\n",buffer);               --->hello word
b2->release();
//ACE_OS::printf("%s",b2->rd_ptr());     --->has excaption
ACE_OS::printf("%s\n",buffer);               --->hello word

3. ACE_Message_Block 下面的用法会共用同一个内存块。通过引用计数的方式释放数据。

ACE_Message_Block *b3 = new ACE_Message_Block(30);
ACE_Message_Block *b4 = b3->duplicate();
ACE_OS::sprintf(b3->wr_ptr(),"%s","hello word");
ACE_OS::printf("%s\n",b3->rd_ptr());  --->hello word
ACE_OS::printf("%s\n",b4->rd_ptr());  --->hello word

ACE_OS::printf("reference_count %i\n",b4->reference_count());  ---> 2
b3->release();

ACE_OS::printf("reference_count %i\n",b4->reference_count());  ---> 1
ACE_OS::printf("%s\n",b4->rd_ptr());  --->hello word
b4->release();
ACE_OS::printf("%s\n",b4->rd_ptr());  --->has excaption

4. ACE_Message_Block下面的用法会进行深拷贝。

ACE_Message_Block *b3 = new ACE_Message_Block(30);
ACE_Message_Block *b4 = b3->clone();
ACE_OS::sprintf(b3->wr_ptr(),"%s","hello word");
ACE_OS::printf("%s\n",b3->rd_ptr());  --->hello word
ACE_OS::printf("%s\n",b4->rd_ptr());  --->乱码

ACE_OS::printf("reference_count %i\n",b4->reference_count());  --->1
b3->release();

ACE_OS::printf("reference_count %i\n",b4->reference_count());  --->1
ACE_OS::printf("%s\n",b4->rd_ptr());  --->乱码
b4->release();
ACE_OS::printf("%s\n",b4->rd_ptr());  --->has excaption

5.ACE_Message_Block 中copy的用法

一般的数据的拷贝可以通过函数来实现数据的拷贝,copy()还会保证wr_ptr()的更新,使其指向缓冲区的新末尾处。

下面的例子演示了copy()函数的用法。

mb->copy("hello");
    mb->copy("123",4);

注意:由于c++是以'\0'作为字符串结束标志的,对于上面的例子,底层数据块中保存的是"hello\0123\0",而用ACE_OS::printf("%s\n",mb->rd_ptr ());打印出来的结果是"hello",使用copy函数进行字符串连接的时候需要注意。

6.ACE_Message_Block 中可以将多个消息块连接起来

ACE_Message_Block *b9 = new ACE_Message_Block(30);
ACE_OS::sprintf(b9->wr_ptr(),"%s","hello");
ACE_Message_Block *b10 = new ACE_Message_Block(30);
ACE_OS::sprintf(b10->wr_ptr(),"%s","word");

b9->cont(b10);

ACE_OS::printf("b10 %s\n",b9->cont()->rd_ptr());
ACE_OS::printf("b10 %s\n",b10->rd_ptr());

ACE_Message_Block 学习的更多相关文章

  1. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  2. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

随机推荐

  1. spring mvc 控制器方法传递一些经验对象的数组

    由于该项目必须提交一个表单,其中多个对象,更好的方法是直接通过在控制器方法参数的数组. 因为Spring mvc框架在反射生成控制方法的參数对象的时候会调用这个类的getDeclaredConstru ...

  2. 《生活在Linux中》之:prefer function to alias in Bash

    在Bash环境中,定义了alias替换有时会产生不是想要的替换:e.g:;而定义function则能够避免这样的缺陷.

  3. 海哥:T2C时代的到来了,那么什么叫T2C?

    昨天写了一篇文章叫做<我为什么选择家具行业,以及T2C概念的创办>,地址:http://user.qzone.qq.com/198819880/blog/1414399801 ,里面提到了 ...

  4. eclipse 构造 C++ 11 -- ubuntu 12.04

    设备g++ 4.8 sudo apt-get install python-software-properties sudo add-apt-repository ppa:ubuntu-toolcha ...

  5. NYNU_省赛选拔题(6)

    题目描述 有一天,小米找到了一个藏宝的迷宫地图,迷宫在一个沙漠里有,迷宫里面有许多宝藏.迷宫里可能有N个藏宝地点,用1到K标记.藏宝地点之间最多有一条通路相连.标记1为迷宫的进出口. 他已经知道其中K ...

  6. javascript 的Date 格式化, 模仿shell中date命令的格式

    原文:javascript 的Date 格式化, 模仿shell中date命令的格式 shell 中显示当前的日期 [root@localhost]$ date '+%Y-%m-%d %H:%M:%S ...

  7. CSS设置滚动条样式[转]

    原文转载地址:http://www.javascript100.com/?p=756 webkit浏览器css设置滚动条 主要有下面7个属性 ::-webkit-scrollbar 滚动条整体部分,可 ...

  8. 2136 Largest prime factor(打表)

    Problem Description Everybody knows any number can be combined by the prime number.Now, your task is ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据 ...

  10. new 和delete

    转自:http://www.cnblogs.com/charley_yang/archive/2010/12/08/1899982.html 一直对C++中的delete和delete[]的区别不甚了 ...