ACE_Message_Block 学习
本文参考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 学习的更多相关文章
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Unity3d学习 制作地形
这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
随机推荐
- MPQ Storm库 源代码分析 一个
MPQ什么? MPQ维基上说的非常明确. 简而言之,它是暴雪公司用于游戏数据打包的工具.星际争霸,魔兽争霸游戏中都有使用.该工具内含游戏资源加密和压缩等功能. git下载地址:http ...
- GridView网格线都设置
如今,做网上商店的商品陈列,我想用网络格布局,但总认为空好看.所以我想给它一个净加格线.但是,我遇到了一个问题,网络格布局其实很easy,是集GridView布局和背景颜色adapter布局设置背景颜 ...
- Oracle按不同时间分组统计
Oracle按不同时间分组统计 Oracle按不同时间分组统计的sql 如下表table1: 日期(exportDate) 数量(amount) -------------- ----------- ...
- 在MVC5中的使用Ninject
在MVC5中的使用 Ninject 从MVC3中就开始接触Ninject这个IOC工具.也一直是MVC Framework系列书籍中推荐的IOC工具,当然还有优秀的Autofac等.性能和使用上面个有 ...
- Mybatis 构造resultMap 搜sql
映射配置文件 <!-- type:映射数据类型的实体类 id:resultMap的唯一标识 --> <resultMap type="person" id=&qu ...
- 从头开始学JavaScript (十二)——Array类型
原文:从头开始学JavaScript (十二)--Array类型 一.数组的创建 注:ECMAscript数组的每一项都可以保存任何类型的数据 1.1Array构造函数 var colors = ne ...
- 如何使用 RMAN 异构恢复一些表空间
在oracle 在日常维护的数据库中难免会遇到误删数据和使用(drop.delete. truncate)当我们使用常规手段(flashback query .flashback drop)当数据不能 ...
- Android Fragment 真正彻底的解决(下一个)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因.以及一些主要的使用方 ...
- monkey命令详解
标准的monkey 命令 adb shell monkey [options] <eventcount> 例如: adb shell monkey -v 产生500次随机事件,作用在 ...
- Unity3D音频播放器 动态装载组件
大多数在线Unity有关如何只教程Unity在播放音乐.之后如何通过拖动它们无法继续添加音频文件 但有时在游戏中的对象要玩几个声音.这时候我们就需要使用代码控制,拖动推教程AudioClip颂值的方法 ...