
c++
文章平均质量分 54
pc0de
面向工资编程
展开
-
寻根究底,Qt容器并行访问问题
???? 问题发现在项目QPerf维护过程中,发现了一个BUG。BUG的相关分析如下:在类WorkRequestState中有一个成员变量QVector<Record *> m_records,其值初始为空,当任务启动时,会将Record实例添加到m_records。Record类包含一个flag属性,该属性直接与当前实例在m_records中的索引绑定,比如第一个Record的flag为0,那么在m_records的索引为0.同时,WorkRequestState对象会等待其它线程原创 2021-04-08 15:31:25 · 1508 阅读 · 0 评论 -
WaitForSingleObject的一个坑
事情是这样的: 一个一年前写的异步队列近期使用频率比较频繁。导致了N个BUG被挖出。一个不到260行的代码文件(加上注释),在捉BUG的过程中,几乎被我重构了一番。以前自以为与用得挺熟的多线程操作也被我发现了几个潜意识中的错误。最后在微软帮助文档中才找到了正确答案。。。。异步队列主要需要面临的问题是资源的竞争与同步,那么我们也最有可能在此犯错误。我写这个异步队列原创 2018-01-22 21:33:07 · 6285 阅读 · 2 评论 -
使用HandleSpy定位托管代码句柄泄漏
引子 我们知道句柄泄漏原因多种多样,一般泄漏的对象主要是内核句柄 、 文件句柄、互操作句柄等。由于Framework的GC帮我们干了很多事情,所以很多C#程序员养成了吃饭后不洗碗的习惯,new出来的对象基本不考虑如何清理。一般的对象当然不用考虑,但是遇到需要释放的对象(如IO操作、内核对象创建等),忘了释放,那问题便产生了。环境说明本文所有演示均在win7 32位。需要安装原创 2017-05-21 18:10:33 · 1894 阅读 · 0 评论 -
OpenGL实现瀑布图的一些思路
本文仅为OpenGL学习与实践过程中的一点记录。。。原创 2017-04-11 06:04:45 · 3087 阅读 · 3 评论 -
C#互操作之GC回收陷阱
起因其实这得从好多年前的一个BUG说起.那一年, 刚刚接触C++不久, 遇到的一个空引用之类的错误,反复调试却没有发现C++有任何的问题 单独跑C#测试也没有任何问题, 屏蔽C++的回调才找到出问题的地方。示例代码为了复现那个BUG的样子,我甩个DEMO出来。C++的代码是下面这样的,公布SetCallback函数,由C#设置回调地址,然后在C++非托管线程中不断调用该...原创 2017-03-23 21:12:03 · 1200 阅读 · 0 评论 -
互操作之DotnetFramework跨平台解决方案
首先说明下,这里“跨平台”是指Windows下的32位与64位平台,不涉及windows以外的平台。 以前的项目都是x86平台下运行, 自然也没有考虑过 DotnetFramework 跨多平台解决方案 这个问题。最近在实现不同平台运行的时候发现有些与我之前想法不符合的地方。于是便决定记录下来。平台dotnetframework 下配置解决方案平台有四种类型:Itanium 、...原创 2017-03-18 08:51:36 · 982 阅读 · 0 评论 -
vs调试c++源码无法加载断点
突然发现所有的c++项目在调试的时候加断点都会报错:”不能设置下面的断点。。。。。断点未能绑定”。起初以为是项目的设置问题,找了各种可能的原因, 包括pdb文件的设置、debug/Release设置,然后发现所有项目都是这样重启vs、重启电脑, 最后论坛求助, 发帖求助链接 都准备重装vs了。然后在vs设置中找到了罪魁祸首 工具-》选项-〉调试-〉编辑并继续-〉启用本机编辑原创 2014-12-07 20:05:18 · 3586 阅读 · 2 评论 -
VC使用动态库关于/MD与/MT的一个坑
项目中使用一个动态库,导出了一个方法void Test(string tt); 这个方法包含一个string类型的参数。在测试项目1中使用该动态库的Test导出方法,无论如何都会在释放参数tt的时候报错。当然,上面的定位到的结果是调试了一天的成果。最后实在没有办法,新建一个动态库项目与测试项目2,使用导出Test,却发现没有报错。然后将新建的动态库使用到测试项目1中,毫不犹豫地报错原创 2016-07-28 20:21:39 · 6877 阅读 · 0 评论 -
UDP丢包的问题
最近在忙着解决一个UDP丢包的问题。首先说说环境。网络环境很理想,万兆内网,主机之间使用一台光纤交换机连接并无任何中间节点;环境中的所有主机操作系统均为win2008Server x64 128G,CPU 32核 2.8GHz一台主机发送数据(通过UDP组播),其它主机接收发送数据的主机开启8路组播端口,每路发送数据很均匀为51.2MBps。(总数据量为8*51.2Mb原创 2016-07-28 21:57:48 · 2021 阅读 · 0 评论 -
C++删除空指针的一个坑
最近使用了项目公共库中看起来很稳定的一个消息队列类(前同事留下的),起初用得还挺好。后来程序中突然出现了内存暴涨的情况,最后定位下来是这个类的问题。随后花了一些时间定位出现问题的代码,其实在DEBUG时都没有找到问题代码,真正找到问题是凭着感觉在一堆代码里揪出了这样一句话:delete (void*)lParam; 灵感突现,这句应该有问题。当时在办公室,不能上网且手里又没有现成的参考资料,于是随原创 2016-12-03 07:24:52 · 1948 阅读 · 0 评论 -
让ZMQ在windows中成功支持PGM
为了弄明白ZMQ中的PGM协议,博主焦虑了不少。总结原因:1、ZMQ的中文文献太少;2、ZMQ在windows下的文献太少;3、国内不翻墙能访问的网站太少。遇到一个看起来不那么棘手的问题好了,言归正传,本文仅记录博主的艰辛历程。在官网下载好ZeroMQ源码后,编译好,然后按照文档写出Pub-Sub模式的测试代码。竟然在bind的时候就报错 void *publishe原创 2016-09-11 16:56:31 · 4963 阅读 · 14 评论 -
win编译安装 protobuf3.2
安装目的在windows中安装 protobuf cpp版本 安装说明本机环境如下 - win10 x64系统 - MS VS2010 - protobuf3.2 源码下载地址 - CMake 3.8安装包 下载地址编译环境设置开始菜单中找到VS目录, 运行Visual Studio x64 Win64 命令提示(2010) 命令窗口会出现 Setting environment原创 2017-02-17 06:55:44 · 2410 阅读 · 0 评论 -
一次笔误导致的bug
事情是这样的,我在程序中要实现一次内存copy,然后使用copy后的内存做算法。算法出来的结果始终不正确。起初以为是算法的问题,后来绕了点弯子,发现拷贝内存这里无论如何都不正确。内存拷贝的代码是这样的memcpy_s(pDst, iDst_len, pSrc, sizeof(ipp32fc) * iArrayLen)pDst是一个char类型的数组,pSrc是一个Ipp32fc类型(IPP原创 2016-12-07 07:31:21 · 560 阅读 · 0 评论 -
ZeroMQ中的消息信封之二
目的不久之前,我写过一篇BLOG ZeroMQ消息信封,介绍了REQ、REP、ROUTER、DEALER几种消息信封的格式。前两天我又回头看了该文章,试图回忆起相关的知识。才发现真是写得一团糟。为了重新理清几种socket的信封,于是有了这篇blog。几种常用形式我决定还是通过ROUTER套接字的几种组合入手,对比几种消息信封。毕竟ROUTER是比较纯结的,收到数据加地址帧,发出的数据拆掉地址帧。与原创 2016-11-07 07:24:24 · 2324 阅读 · 0 评论 -
ZeroMQ中的消息信封
几种ZeroMQ socket信封格式本文仅仅简单介绍zs的REQ、REP、ROUTER、DEALER信封,作为阅读ZeroMQ资料笔记REP socket信封REP存储所有的消息帧,直到第一个空消息帧到达,应用层才接收到一个 消息。 发送回复的时候,REP才将已保存的信封附加到消息中,然后使用与ROUTER一样的语义发送(事实上REP也构建于ROUTER之上),但是为了匹配REQ,REP必须强制遵原创 2016-09-29 18:00:00 · 1379 阅读 · 0 评论 -
开始学习一个同事推荐的通讯库
某同事离职一年多后,某次聚会上相谈甚欢。我当时正在琢磨着找一个稳定并且夸平台的开源框架应用到项目中。于是他推荐给了我两个,一个是thrift,一个是ZMQ。后来项目的事情拖了很久,上班时间又没法上网学习。于是我就利用那段空闲,一个多月的加班自己封了一下win32的socket,临时先用下,顺便熟悉下windowsAPI的编程。结果事情有点超出了预期,我自己写的通讯库直接就在项目里面用起来了。不原创 2016-09-03 08:54:08 · 574 阅读 · 0 评论