本文参考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. HDU 3037 Saving Beans (Lucas法则)

    主题链接:pid=3037">http://acm.hdu.edu.cn/showproblem.php?pid=3037 推出公式为C(n + m, m) % p. 用Lucas定理 ...

  2. ABP

    ABP ABP之Javascript生成 2015-08-02 18:49 by Barlow Du, 319 阅读, 收藏, 编辑 还是服务在调试SimpleTaskSystem的AngularJs ...

  3. Json.NET提供依赖注

    Json.NET提供依赖注 [.NET] 使用Json.NET提供依赖注入功能(Dependence Injection) 前言 在一些小型项目的开发情景里,系统不需要大型DI Framework所提 ...

  4. iOS学习笔记---简单的学习总结

    1.xcode6.0官方的版本必须是OS X10.9.4而以上的版本安装前: 2,xcode6.0正式版创建命令行项目时,无法选择swift语言:可是创建iOS应用项目时能够选择swift语言. 3, ...

  5. [Network]Introduction and Basic concepts

    [该系列是检讨计算机网络知识.因为现在你想申请出国.因此,在写这篇博客系列的大多数英语.虽然英语,但大多数就是我自己的感受和理解,供大家学习和讨论起来] 1 Network Edge The devi ...

  6. crawler_http关闭连接

    1:ps aux|grep Spider4Test.jar 查看端口 2: lsof  -p [端口号] 在爬虫运行期间如果看到 大量的 TIME_WAIT  WAIT_CLOSE 说明请求关闭阻塞[ ...

  7. linux_删除空文件(大小等于0的文件)的方法

    1: 查看 find . -name "*" -type f -size 0c 2:删除 find . -name "*" -type f -size 0c | ...

  8. 【转】Appium 服务器端从启动到case完成的活动分析

    原文地址:http://blog.csdn.net/zhubaitian/article/details/39474151 此文的目的主要是通过分析Appium Server打印出来的log,加深对A ...

  9. 了解了解你自己的话zookeeper(从那时起,纠正了一些说法在线)

    1,先看看官方的定义吧: ZooKeeper is a distributed, open-source coordination service for distributed applicatio ...

  10. sql server 视图 的一个例子

    这是一个 有点复杂的查询.我现在 想把他封装 成 视图  其中  B.RecordID= 41 提供给 视图外查询. create view view_UserRecord as select Rec ...