函数声明

 template<ACE_SYNCH_DECL >
int ACE_Task< ACE_SYNCH_DECL >::putq  (   ACE_Message_Block *     ,ACE_Time_Value *   timeout = 0 )  

timeout参数

timeout参数使用绝对时间,而不是相对时间。使用时我们可以使用ACE_OS::gettimeofday ()获取系统当前时间,再加上一个相对时间来确定超时时间。

ACE_Message_Block::duplicate ()的使用

ACE_Message_Block *mb;
……
……
if (test_task->putq (mb->duplicate (), timeout) < 0)
{mb->release ();
}mb->release ();

上面的代码在正常情况下不会引起问题。在正常情况下,程序可能运行很多年都不会发现什么问题,但却隐含着一个不容易出现的小问题。代码作者认为,在入队列前先增加了数据块的引用计数,入队成功后,减少1次引用计数,取队列的代码最终再使用完MB后再次release ()降低引用计数时,即可释放数据块;如果入队失败了,在if块中降低1次引用计数,在外面再release一次会释放数据块。实际上这时候悲剧就发生了。if块中的确会降低数据块的引用计数,但同时会设置自己对数据块的指针为0。再次release虽然程序不会报错,但内存却泄露了。因为duplicate浅拷贝,会动态分配一个ACE_Message_Block对象,这个对象中保留着对数据块的引用计数,因此数据块和浅拷贝动态分配的ACE_Message_Block都得不到释放。

这个问题隐藏的比较深,if块在正常的逻辑流程中不会走到。

ACE_Message_QueueACE_MT_SYNCH::putq ()使用时需要注意的地方相关推荐

  1. SqlHelper.cs 使用时要注意的地方

    在使用SqlHelper.cs 编写数据访问层时如果你这样写: SqlHelper.ExecuteScalar(DBH.ConnStr, "UserClass_CheckClassId&qu ...

  2. android判断点击次数_Android应用统计-使用时长及次数统计(一)

    关键字: 应用统计 Android源码 应用使用时长 应用使用次数 最近在做有关于应用统计有关的工作,主要是统计系统中客户端应用(非系统自带的那些基础应用,比如DownLoadManager),在每一 ...

  3. 基于模板的通用代码生成器LKGenerator(二)-使用时的关键步骤,注意事项及实例

    通过本文,您将了解本代码生成器使用时的关键步骤,使用时的注意事项及实例. 本代码生成器的原理:提供一个可被jvm加载的class文件,然后通过java的注解和反射技术读取信息,通过本工具放入到Velo ...

  4. struts的比较标签,在使用时,与测试时需要留心。

    大于:<logic:greaterThan> 大于等于:<logic:greaterEqual> 小于:<lessThan> 小于等于:<lessEqual& ...

  5. ThreadLocal使用时因线程复用导致数据混乱分析

    ThreadLocal使用时因线程复用导致数据混乱分析 本文主要阐述使用ThreadLocal遇到数据混乱情况下的具体分析和解决过程 ThreadLocal原理 网上有很多介绍,不做详细介绍主要有四个 ...

  6. mysql varchar 单引号_char、varchar数据类型值在使用时可以要用单引号或双引号括起来。...

    [单选题]幼儿主要的活动方式是( ) [单选题]在CREATE TABLE语句中,通常使用( ) 关键字来指定主键. [简答题]传统密码 [单选题]收集资料的目的不包括 [单选题]阅读课文p100第三 ...

  7. Android应用统计-使用时长及次数统计(一)

    关键字: 应用统计 Android源码 应用使用时长 应用使用次数 最近在做有关于应用统计有关的工作,主要是统计系统中客户端应用(非系统自带的那些基础应用,比如DownLoadManager),在每一 ...

  8. 本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止

    Oracle本地有环境,搭建本地环境之后,一直是好的,突然有一次改了IP,然后启动oracle监听时候,就报错了:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后 ...

  9. jadx-gui 1.4.5使用时遇到的问题

    jadx-gui 1.4.5使用时遇到的问题 解决方案可直接跳到"二.设置首选项" 文章目录 jadx-gui 1.4.5使用时遇到的问题 前言 一.问题现象 1.根源所在 2.表 ...

最新文章

  1. 码易众包:软件开发众包的未来不能只靠等待和呐喊
  2. MyEclipse 中修改JSP模板
  3. 正则表达式的一点说明
  4. Java 使用枚举类的实例
  5. IOS开发基础之屏幕组件适配添加约束
  6. 让窗体获得焦点,一定会有您用到的时候
  7. java.nio.DirectByteBuffer管理堆外内存
  8. sql server 入门_SQL Server中的数据挖掘入门
  9. Visual Studio Code远程开发配置
  10. 英国政府寻求在2022年成为“全球性网络力量”
  11. android scrollow嵌套listview,excel 中IDEX和MATCH函数嵌套应用.doc
  12. OpenCV图像处理(7)——图像上写TEXT
  13. 通过命令行启动uwp应用
  14. Django 文件下载
  15. 【记Unexpected token】
  16. 部门换届推文文字_宿委会换届表彰大会!!!
  17. android 高德地图全套,android快速集成高德地图
  18. python 抓网卡数据包 解析wifi_某高校校园网WIFI嗅探用户名密码实践
  19. 【工具安装】Quartus II 安装与驱动
  20. 上位机plc编程入门_plc编程入门-看完你就懂了

热门文章

  1. 高端运动耳机哪个品牌最好、最好的运动耳机品牌排行
  2. 传统企业如何做数字化转型?弄懂这3大底层逻辑你就懂了
  3. leetcode — 46. 全排列(不含重复数字)
  4. Linux-磁盘扩容(逻辑卷方式)
  5. Apk脱壳圣战之---如何脱掉“梆梆加固”的保护壳
  6. Spring系列学习之Spring Data Elasticsearch数据访问
  7. 前端(JavaScript)------字符串
  8. Re:从零开始的DS生活 轻松从0基础实现多种队列
  9. 限制输入框输入(数字、小数点、负号)
  10. 硬核数据处理笔记本推荐(2023版)