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.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
随机推荐
- 用命令行在github新建一个项目
Github Repository API中说明了可以通过发送一个请求来认证,之后就能通过命令行自动新建远程仓库了. 认证 curl -u 'username' https://api.github. ...
- 轻狂写的桌面日历秀NSIS脚本供大家参考学习
原文 轻狂写的桌面日历秀NSIS脚本供大家参考学习 现在共享桌面日历秀的NSIS脚本,以便交流学习.此脚本实现的功能如下: 7-Zip打开看不到内容.自动读取原安装路径,如果有则不允许更改.取得编译日 ...
- Web 服务器 (IIS) 角色
原文:Web 服务器 (IIS) 角色 1. 对于默认安装,请在命令行提示符下键入以下命令,然后按 Enter: start /w pkgmgr /iu:IIS-WebServerRole;WAS-W ...
- YUV422蓝色屏幕输出的调试援助
YUV422蓝色屏幕输出的调试援助 YUV422有YUYV,YVYU,UYVY,VYUY四种,以下笔者就就以UYVY为例介绍一下数据构成.因为常常要跟视频输入打交道,所以YUV422这种常见的视频信号 ...
- 打造简易可扩展的jQuery/CSS3 Tab菜单
原文:打造简易可扩展的jQuery/CSS3 Tab菜单 今天我们利用jQuery和CSS3来打造一款简易而且扩展性强的Tab菜单,这款Tab菜单在切换时也有滑块的效果,先来看看效果图: 由与Tab菜 ...
- poj 2449 Remmarguts' Date 【SPFA+Astar】【古典】
称号:poj 2449 Remmarguts' Date 意甲冠军:给定一个图,乞讨k短路. 算法:SPFA求最短路 + AStar 以下引用大牛的分析: 首先,为了说话方便,列出一些术语: 在启示式 ...
- gets、scanf和getchar之间的区别
gets gets.scanf和getchar之间的区别 1. gets函数读取数据时,接受的数据包括数据和回车符.即:读取数据后输入流没有输入 操作动作. 2. scanf函数读取数据时,接受的数据 ...
- Android手游《》斗地主完整的源代码(支持单机和网络对战)
Android手游<斗地主>完整的源代码(支持单机和网络对战)下载.一个很不错的源代码. 斗地主掌游是一个独特的国内社会斗地主棋牌游戏,之后玩家可以下载网上斗地主和全世界.掌游斗地主特点: ...
- Net下无敌的ORM
Dapper ORM 用法—Net下无敌的ORM http://www.renfb.com/blog/2011/Article/335 假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上 ...
- 基OOP知识
从今天开始,我开始总结GAO还通高老师<android道路的建筑师>,尝试一个星期写三个博客. 相对而言.看到这篇文章有点速度比你可以观看视频,刚才看的视频是更具体的.假设有兴趣,跟着我去 ...