自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 定义c++位结构

C里面有按位定义结构的方式,例如:struct SBit { int a:1; int b:2;};结构中每个成员占有的bit数可以是任意的,而且结构中间不会有字节补齐导致的空bit使用上述C结构可以满足大多数对内存按bit读写的应用,但如果字段间有间隔,就需要人为插入空字段,显得不是那么方便了。使用C++,我们想这样定义一个结构:struct SBit { BitValu...

2018-06-02 23:57:10 2215

原创 卸载ACE动态库导致句柄泄漏问题

ACE动态库在反复加载和卸载后,会出现无法

2014-07-06 00:52:41 920

原创 实现C++ style的动态库函数加载器(续)

templatestruct DLL{ template struct FunTypeWrapper { typedef T type; }; template struct Fun { Fun() { const char * funNmae = getSymbo

2014-04-30 23:00:04 571

原创 实现C++ style的动态库函数加载器

动态库加载底层c运行库就三个函数 dlopen、dlsym、dlclose,非常简洁,

2014-04-29 23:31:22 510

原创 对ACE锁、条件变量、信号量在windows和linux平台下的测试

Windows版本1 ACE_Thread_Mutex 场景1:4836 ACE_Thread_Mutex::acquire ret 0 [202049422-202049422].1504 ACE_Thread_Mutex::acquire ret 0 [202049422-202049522].4836 ACE_Thread_Mutex::release ret 0 [20

2014-04-28 23:29:22 992

原创 c++标准库容器使用概览

容器用于保存一组相同类型元素,因此一个容器可以看作是一类数据的集合。容器按其对元素的管理形式分为值容器和引用容器两种类型。值容器里,插入一个元素时,容器保存的是一个元素的副本,而引用类型容器则是保存该元素的引用或者地址。值容器可以简单的模拟引用容器,只需要把元素类型定义为指针就可以了,因此值容器更为通用。C++标准库里所有的容器都是值容器。容器按类型分类包括有序和无序两种。标准库的有序容器包括

2014-04-28 22:42:45 634

原创 异步ping的实现,如何在10秒内ping完20000个设备

ping报文的原理就是先向特定的ip地址发送一个ping请求消息即ping echo,然后如果对应ip地址的服务器收到这个请求的话就会发送ping回应消息即ping reply。通过抓包,还可以看到,如果本地主机的arp表里没有对应目的地址的表项,底下网络层会发送arp报文查询目的主机的mac地址,等收到对端的arp响应后,再发送ping echo请求,否则也会ping失败。正常的

2014-04-27 23:50:31 2957 1

原创 C++程序中如何规避子进程退出过程中出现的异常

linux下通过fork方式创建的子进程,在进程退出后

2014-04-09 23:59:53 2687

原创 链接不同版本的CRT运行库导致堆错误

前两天碰到一个运行库不匹配导致程序异常退出问题,现象是这样的:首先是一个dll里的导出函数参数有一个std::string类型的出参,在可执行程序里调用了这个dll的库函数,出来后释放std::string对象就崩溃了__declspec(dllexport) void getSomething(std::string &strOut);int main(){ std

2014-03-29 00:29:33 1259

原创 使用xml描述的数据周期统计框架

项目中经常会用到对一些数据作周期统计,从而生成报表,通常原始的数据是存放在各种数据库表里的,需要根据特定的规则进行数据统计后输出,通过写数据库的存储过程是一种方式,但存储过程一般难以跨数据库统计,而且限制于特定的数据库脚本语言,支持不同类型数据库就需要重写脚本,不易维护。所以开发一套通用的数据统计框架以及统计规则描述模板,可以用更简洁的方式来描述出统计的规则,适

2014-03-18 22:54:19 736

原创 C++泛型编程技巧 - 如何判断输入类型是否定义了特定的成员函数

判断一个类型包含了哪些数据或函数成员在提供了类型反射机制的高级语言上大有用处,而C++这种静态语言并未提供直接支持。需要有类似MFC一样在每个类型里编写组织相关信息的代码才行。本篇尝试使用一种非侵入式的判断方式,不需要修改原有类定义,来判断某个类型是否包含特定的成员数据或者函数举例来说,有类型A,B定义如下:class A{public: bool less

2013-08-24 00:23:42 2548 2

原创 C++封装使用隐式链表维护固定长度的内存池

所谓固定长度内存池是指每次从内存池申请的内存长度是不能变的,如果内存池初始化每块内存的大小是100字节,那么每次申请出来的内存长度就是100字节,不会多也不会少。固定长度的内存池有很多的应用场景,比如图像的编解码,码率的固定导致每帧图像的大小是比较固定的,因此可以使用固定长度的内存池来优化图像缓存的申请和释放。隐式链表是一个单向的链表,使用每块空闲内存块的前四个字节来保存下

2013-05-06 23:56:24 689

原创 C++标准库扩展,查找元素,使用修饰者模式构造查询条件

C++标准库的的查找算法std::find_if 允许提供一个pred函数用于在容器内查找满足pred函数调用为真的元素。同样以学生信息结构为例,常常会需要查找结构的某个成员是特定值的元素,比如查找所有计算机系的学生。每次为这种特定需求写一个函数对象不够灵活,我们也希望通过一组通用的函数对象构造模板来实现。下面这个函数对象用于比较对象的某个成员是否和输入的值相等:

2013-04-24 00:22:40 582

原创 C++标准库扩展,给结构排序

C++标准库的容器依赖less操作来比较元素的大小,比如std::sort可以传入一个pred,提供元素的less比较方法,缺省会使用std::less即调用元素的对于自定义结构类型,可能需要根据一个或者多个数据成员来比较其大小,比如如下人员信息结构,需要结合三个字段进行排序,否则不能唯一确定大小:struct Person{ std::string strName;

2013-04-18 00:32:20 603

原创 C++标准库流输出类的一个使用问题

今天遇到一个问题,使用std::ostringstream拼装字符串,发现所有的整形打印出来后都是以逗号分隔的形式,即对于整数3600 输出为: 3,600每隔三位就会自动加上一个逗号,这样导致接受端不能将对应的字符串成功转换回整形,比如上面3,600通过atoi转换就只能得到3了上网了解了下,这个和程序运行环境的local的设置有关,C++中所有的输入输出流都使用std::loc

2013-04-01 23:53:09 1166

原创 迭代器模式

C++ stl引入的迭代器模式,除了本身为stl容器的操作提供了统一的接口,方便stl泛型算法以统一的方式操作所有stl容器外,在其它所有涉及遍历数据的应用地方,都有它的用武之地,下面列举几个我自己按迭代器模式封装的几个工具类,抛砖引玉。一、迭代分割的子串class CStrtok{public: //构造函数,接收参数 CStrtok (char *

2013-03-28 00:24:40 531

原创 解决C++函数模板重载时出现的歧义,函数模板隐藏技术

函数重载是C++中实现静态多态的重要机制,在定义函数重载时,特别是在有函数模板加入时,更需要小心定义参数,防止歧义的出现举例来说,有下面两个重载函数,用于执行数据库查询并返回查询结果,分别对应到查单个值和查列表两个版本,模板类型参数V是查询结果的类型:templatelong query(const std::string &strSql, V *pv, CDBConn

2013-03-24 00:23:06 1893

原创 C++实现带类型安全检测的memset

使用memset将一个c++对象清零显然是灾难性的,特别是刚从c转过来的同学,就喜欢对定义的变量来个memset,比如std::string对象,结果可想而知。c++里面专门有个概念叫做pod类型,所谓pod类型应该就是c里面的结构类型,对应的反义词就是c++的类类型因此,在pod类型上调用memset清零是安全的,而非pod上则是禁止的。pod类型的一个必要条件就是类型里

2013-03-23 01:11:08 1451 1

原创 网络设备链路发现算法

网管软件的ip拓扑用于直观的表现网络设备间的链路连接状况,实时刷新各条链路状态信息,排除故障如何自动的识别出设备间存在的链路,各条物理链路的两端连接了哪两个设备,用了哪两个接口,是实现ip topo的关键而网管软件计算设备间链路的关键数据就是设备arp表。windows下,使用arp命令即可显示arp信息:C:\Documents and Settings\cj>a

2013-03-23 01:05:09 1465

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除