自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 资源 (16)
  • 收藏
  • 关注

原创 Win32 API中内存的申请与释放

     之前在做内存泄漏分析模块功能开发时,发现在windows下的输出结果并不是很准确,很多内存泄漏都显示是在windows的api或crt函数中,比如CoInitializeEx,stderror,IsOS等。     以CoInitializeEx为例,调用CoUninitialize后,它申请的内存并没有相应的free掉;stderr中,申请的内存也没释放;   &

2022-02-16 17:05:12 1860

原创 LuaJIT开发过程中的注意事项

LuaJIT中的bug和改进点1,不支持正则表达式中\\\s的语法2,不支持读取文件的全部内容3,x64下luaL_newstate不支持自定义内存分配函数LuaJIT虽然是一个非常优秀的lua开源库,但是在使用过程中,还是发现了它的一些bug以及改进点,下面简要描述一下在实际项目开发中碰到的问题。本文持续更新。1,不支持正则表达式中\\s的语法在lj_lex.c文件的lex_string函数中,对lua语句进行解析时,下面这些case(截图不完整,详细的case看代码),三个斜杠加上字符串都不支持

2021-09-18 15:01:05 477

原创 程序的编译与链接

程序的编译与链接一,预处理二, 编译1,词法分析2,语法分析3,语义分析4,中间语言的生成5,目标代码生成和优化三,链接     在日常的应用程序开发过程中,我们很少需要关注软件的编译和连接过程,特别是对于常用的集成开发环境visual studio,它将编译和链接的过程封装起来,一步完成,称为“构建”。   &n...

2020-03-08 23:20:41 9223

原创 在C++中使用信号和槽(sigslot库介绍,含demo链接)

在C++使用信号和槽(sigslot库介绍)一,使用场景二,sigslot库简介1,参数类型2,信号连接与槽3,信号与槽的断开4,信号的触发5,信号的线程安全6,槽的线程安全三,样例演示一,使用场景     在日常的代码开发过程中,我们经常会用到一种场景:当某个业务触发的时候,我们需要通知到不同的模块,让各个模块来处理这些触发的业务。这也就是设...

2020-02-29 20:25:09 11609

原创 Mysql 表字段修改 并发情况下避免重复

Mysql 表字段修改 并发情况下避免重复一,场景二,问题三,解决方案一,场景     多个用户同时修改用户名时,存在用户名相同的情况,而由于业务需要,用户名是不允许相同的,需要避免重复。二,问题     sql语句举例(伪代码): If(name not exited) (1) {...

2020-02-29 15:40:29 10861

原创 (TeamTalk服务端源码分析三)route_server源码分析

route_server源码分析     Route_Server是路由服务器,当存在多个MsgServer时,用户可能登陆在不同的MsgServer上(由Login_Server进行负载均衡),那么对于连接在不同的Msg_Server上的两个用户A和B如何进行消息转发呢,这个时候就需要用到Route_Server。  &n...

2019-12-09 21:01:08 8563

原创 (TeamTalk服务端源码分析二)Login_server源码分析

Login_server源码分析     Login_server是Teamtalk客户端最先通信的后台服务程序,客户端发送请求到login_server获取到负载最小的msg_server的地址,端口等信息,然后再连接到相应的msg_server上,发送登录请求,完成登录的流程。这样看来,虽然这个服务器名称是叫login_server,但是它承...

2019-11-21 20:29:01 8944

原创 const char * 和 std::string.c_str()引起的坑

const char *和std::string.c_str引起的坑一,发现问题二,解决方法今天早上有同事说调用封装好的编码转换函数,有时候能转换成功,有时候转换会失败,一听现象我就猜测是用法导致的问题,定位下来果然是用法使用有误,当然也跟我们封装的函数有关,记录下来,避免再次采坑。一,发现问题该编码转换函数实现如下://ANSI转UTF8static std::string AnsiT...

2019-08-21 19:47:45 9622

原创 修改lib库对应的dll名称

修改lib库对应的dll名称     在某些场景下,我们需要修改lib库对应的dll名称,这当然不是简单的给dll重命名一下,或者使用notepad++等工具打开lib文件,修改其中的dll名称。后一种方式会直接导致lib文件破坏,vs编译报错。     既然不能直接从lib下手,我们可以逆向考...

2019-07-08 20:14:46 10451 2

原创 amqp_basic_publish报错AMQP_STATUS_TABLE_TOO_BIG

amqp_basic_publish报错AMQP_STATUS_TABLE_TOO_BIG今天在做业务的时候,碰到一个奇怪的现象,发送同样属性和内容的消息,到相同的交换机上,debug模式下能发送成功,release模式下发送失败,并且报错AMQP_STATUS_TABLE_TOO_BIG,查看rabbitmq源码解释这个报错如下:简单解释就是:由于消息体太小,amqp_table_t不能被...

2019-06-20 20:59:09 5963

原创 查看dll的附加依赖项

查看dll的附加依赖项一,vs的dumpbin二,depends最近做的项目除了主程序,其他都是插件,动态加载运行的,有时候缺少依赖项而运行不起来,因此总结了两种查看dll依赖项的方法。一,vs的dumpbinvisual studio编译器自带有dumpbin工具,可以通过它查看exe或者dll的依赖项。通过开始菜单打开vs命令行工具。输入dumpbin /dependents 文件名...

2019-06-19 19:45:54 13808 1

原创 LoadLibrary失败,GetLastError= 193

LoadLibrary失败,GetLastError= 193LoadLibrary失败,GetLastError报错193时,一般是加载的dll所依赖的某个dll它的依赖项不存在所报的错,可以用Dependency Walker验证该dll所依赖的加载项是否都存在。Dependency Walker安装vs时一般都自带有,如果没有也可以去官网下载http://www.dependencywal...

2019-06-10 09:02:40 17924

原创 RabbitMQ-operation queue.declare caused a channel exception precondition_failed错误

RabbitMQ-operation queue.declare caused a channel exception precondition_failed错误今天早上有个同事在RabbitMQ服务器上做测试时,连续publish message两次都导致RabbitMQ服务挂掉,进程直接中止。但是按照他的描述我发布同样的消息,却是正常的。第一反应是查看日志,进入mq的日志目录,默认位置为:...

2019-05-07 22:44:51 13453

原创 RabbitMQ-topic主题模式

RabbitMQ-topic主题模式     Topic: 所有符合routingKey(此时可以是一个表达式)的routingKey所绑定的队列可以接收消息;     发送到topic类型交换机的消息的routing_key不能随便设置–它必须是多个单词组成,用点分割。单词可以是任意的,但它们...

2019-05-05 19:48:34 12140

原创 RabbitMQ-direct直通模式

RabbitMQ-direct直通模式     direct: 把Exchange上的消息发送到匹配routing key的队列中。     消费者队列绑定关键字到交换机上,发送者将数据根据关键字发送到交换机上,交换机根据关键字去遍历绑定到它上面的队列,将数据发送至指定关键字的队列。&nbs...

2019-05-02 15:10:46 6260

原创 C++虚表地址和虚函数地址

C++虚表地址和虚函数地址虚函数是c++实现多态性的一个重要知识点,本文主要解析虚函数在内存中的地址,以及与虚表地址的关系。声明一个类,包含两个虚函数,一个普通成员函数和一个类成员。调试程序,查看test对象的内存分布如下:_vptr是一个指向虚表的指针,可以理解为一个int* p[2],在本例中,p[0]是指向Test::func1()地址的指针,p[1]是指向Test::func2...

2019-04-12 20:17:44 8418

原创 C++ RabbitMQ封装

C++ RabbitMQ封装RabbitMq的源码可以在官网下载https://www.rabbitmq.com/,需要使用cmake转为vs工程。由于源码不大,此处选择编译librabbitmq,生成librabbitmq.4.lib静态库,直接链接到自己的程序中。附上vs版的源码,我使用的是vs2017,低版本的可以自行百度修改vs版本。首先封装CQueue类,包含队列的持久化,自动创建...

2019-03-28 18:43:00 11535 4

原创 RabbitMQ-fanout广播模式

RabbitMQ发送模式之fanout     fanout: 所有bind到此exchange的queue都可以接收消息(纯广播,绑定到RabbitMQ的接受者都能收到消息);     消息的接受者需要创建一个队列,绑定到该fanout交换机上,监听来自发送端的消息广播。广播是实时的,prod...

2019-03-28 18:25:15 6542 1

原创 makefile通用模板

makefile通用模板结合自己编译redis测试代码,总结出一个makefile模板,以下makefile是以redis的测试代码为例进行验证的(请见我另一篇博文Linux下C++访问Redis)#wildcard把 指定目录 ./ 和 ../lib 下的所有后缀是cpp的文件全部展开。SRCS = $(wildcard *.cpp)#OBJS将$(SRCS)下的.cpp文件转化为.o...

2019-02-20 22:30:01 6666

原创 TeamTalk客户端源码分析七

TeamTalk客户端源码分析七一,CBaseSocket类二,select模型三,样例分析:登录功能     上篇文章我们分析了network模块中的引用计数,智能锁,异步回调机制以及数据的序列化和反序列化操作,本文主要介绍该模块中socket通信的实现。一,CBaseSocket类&a

2019-02-13 19:55:05 7617 9

原创 TeamTalk客户端源码分析六

TeamTalk客户端源码分析六一,引用计数和锁二,异步操作三,数据序列化和反序列化四,socket封装上篇文章介绍了httpclient模块,TeamTalk中还有一个网络模块network,它也是一个单独的动态库,内部只支持TCP通信,提供了网络回报异步通知的机制,并且通过Google Protocol Buffer(推荐学习博文Google Protocol Buffer 的使用和原理)对...

2019-02-02 17:22:13 7757

原创 const_cast,dynamic_cast,reinterpret_cast,static_cast四种转换的区别

const_cast,dynamic_cast,reinterpret_cast,static_cast四种转换的区别一,const_cast一,dynamic_cast一,reinterpret_cast一,static_castC++是一种强类型语言,对类型的检查非常严格,我们可以使用C语言中的(NewType)Expression来对某个变量或者表达式返回值进行强转,也可以使用C++中提供...

2019-02-02 09:34:19 18234 6

原创 C++仿函数和Lambda表达式

C++仿函数和Lambda表达式一,普通函数二,仿函数三,Lambda表达式四,Lambda外部变量捕获     在使用algorithm算法库中的很多函数时,最后一个参数都是需要传入一个函数指针,当对数组或者容器数据遍历时,通过函数指针指向的函数内部的逻辑处理进行过滤,筛选出符合条件的值并进行结果统计或返回。第三个参数的实现形式,从最开始的普通...

2019-01-21 20:14:58 14506 1

原创 阿里云网站备案与域名解析操作流程

阿里云网站备案与域名解析流程之前一直没有完整的做过域名解析绑定和网站域名备案,这次从头到尾操作了一次,比较顺利,特记录下操作步骤,以作备忘。1,登录注册了域名的阿里云账号,对于非万网注册的域名可以进行导入到阿里云来进行管理。2,进入域名解析列表3,点击“解析设置”,点击“新手引导”,在“网站解析”页面添加您网站所在服务器ip地址,在“邮箱解析”页面添加将要将域名指向的邮箱(域名注册信息...

2019-01-12 11:54:26 12293

原创 C++修改图片大小

C++修改图片大小一,OpenCV改变图片大小二,FreeImage改变图片大小三,结论     前段时间做一个项目需要将4K的图片缩小为A纸大小(595.0 * 842.0),在网上找了几种方式,最终决定直接选用第三方库Opencv和FreeImage,并对这两种方法的效果做了一个对比,由于图像处理没有深入学习过,在此只看处理后的效果,不做具体...

2019-01-02 21:45:05 13421

原创 socket关闭close和shutdown的区别

socket关闭close和shutdown的区别close——只是减少该socket id的引用计数,并不直接关闭网络连接,其他使用这个socket id的进程还可以正常进行网络通信的读写操作。直到引用计数为0,才释放套接字shutdown——可以直接关闭网络连接,由第二个参数决定当前socket id的网络连接是可读,还是可行,或者读写全部禁止(也即socket完全关闭)shutdown...

2019-01-02 18:56:44 8853

原创 浅析Windows程序输入法工作原理

浅析Windows程序输入法工作原理一,输入法结构介绍二,Windows消息循环捕捉键盘消息三,总结     输入法程序也是一个进程,但是我们在任务管理器中却找不到该进程,找到输入法的安装目录会发现一个后缀是.ime的文件,就是一个dll的模块,当一个进程打开输入法要输入汉字的时候其实是加载了这个模块。一,输入法结构介绍1),IMM-输入法管...

2018-12-23 22:28:56 10307

原创 判断一个链表是否有环

判断一个链表是否有环(c/c++实现)方法一方法二方法三给出一个单向链表,判断链表中是否存在环。虽然是一个实际工作中基本不会碰到的场景,但是面试的时候总是会考到,因此整理下各种解法,以免需要的时候用到。温故而知新!方法一第一种方法是大家都能想到的,就是利用空间来换时间:遍历链表中的每一个节点,放入一个容器中(此处使用std::set,查找速度快),每次插入容器的时候,判断是否已经存在相同节点...

2018-12-17 20:18:08 8834

原创 TeamTalk客户端源码分析二

TeamTalk客户端源码分析二一,GroupList二,UserList,Session上一篇文章介绍了TeamTalk中的观察者模式回调机制,主要使用方法有三步:1,不同的业务各自继承一个ModuleBase2,在各个需要用到该业务的类中去将当前类绑定到该业务的观察者中。3,在触发的地方调用asynNotifyObserver本节再来介绍Modules工程中基于ModuleBase实...

2018-12-09 11:03:11 8336

原创 C++实现客户端升级流程

C++实现客户端升级流程一,需求分析二,主程序实现三,升级程序实现四,升级程序实现自己做的股票行情软件最近需要做一个自动升级的功能,正好也想着把之前学的技术知识点做一个总结,因此,在这里记录下实现自动升级的大概流程以及部分代码。一,需求分析程序升级最常见的架构就是C/S架构了,包括主程序客户端,升级程序客户端,服务端程序。客户端每次启动向服务端发送请求,获取到最新版本号,与本地版本号进行对比...

2018-11-14 19:35:23 15148

原创 realloc函数使用注意事项

realloc函数使用注意事项realloc是c语言中常用的内存重分配函数,函数声明如下:/*** 重新分配内存大小* @param mem_address: 需要改变内存大小的指针* @param newsize: 内存新的大小* @return void**/void *realloc(void *mem_address, unsigned int newsize);rea...

2018-11-09 16:49:37 9713

原创 IOCP完成端口模拟线程池

IO完成端口的使用一,样例介绍一,样例介绍生产者-消费者模式是一种非常常见的设计模式,它可以很好地模拟实际编程中的大部分使用场景,而IO完成端口也是用来实现多线程之间的通信,因此,本实例基于该模式完成。首先,我们需要创建IO完成端口,最后一个参数为0,默认创建的IO完成端口数目就是处理器数目,同时,和要创建一定数目的消费者线程,来处理数据。//创建1个IO完成端口(最后一个参数为0表示创建...

2018-11-08 17:55:30 9006

原创 ANSI,UNICODE,UTF8之间的相互转换

ANSI,UNICODE,UTF8之间的相互转换ANSI转UNICOEUNICODE转ANSIUTF8转UNICODEUNICODE转UTF8ANSI转UTF8UTF8转ANSIANSI转UNICOEstd::wstring AnsiToUnicode(const std::string &strAnsi){ //先获取到转为unicode后的长度 int nUnicodeLe...

2018-10-23 10:15:10 14804

转载 unicode,ansi,utf-8,unicode big endian编码区别

unicode,ansi,utf-8,unicode big endian编码区别1. ASCII码2、非ASCII编码3.Unicode4. Unicode的问题5.UTF-86. Unicode与UTF-8之间的转换7. Little endian和Big endian8. 实例9. 延伸阅读1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位...

2018-10-18 15:04:19 10046

原创 RapidXml读取并修改XML文件

RapidXml读取并修改XML文件RapidXml介绍RapidXml读取与修改xml文件RapidXml介绍RapidXml尝试创建最快的XML解析器,同时保留可用性,可移植性和合理的W3C兼容性。它是一个用现代C ++编写的原位解析器,解析速度接近strlen在同一数据上执行的函数。它仅仅只由四个头文件组成,并不要单独进行配置编译,使用起来非常方便。在RapidXml的官网上,它发布了...

2018-10-18 11:42:37 11706

转载 [转]GDI 泄漏检测方法

GDI 泄漏检测方法方法一方法二方法三转载至https://www.cnblogs.com/doudongchun/p/3699695.html方法一1、打开电脑的【任务管理器】,选择【进程】页,点击菜单项的【查看】项,选择【选择列】;2、勾选【GDI对象(J)】即可。3、此时,用户就可以在进程中看到每个进程对应的GDI对象,每个进程的GDI对象(网页浏览器除外,每打开一个网页GDI...

2018-10-15 11:17:16 8237

原创 c++实现rtsp点播客户端

c++实现rtsp点播客户端RTSP协议简介LIVE555的testRTSPClient.cpp简介RTSP视频流的处理RTSP协议简介简单来说,RTSP协议是一种基于命令形式的协议,对于服务端S和客户端C,两者的命令交互过程为:第一步:查询服务器端可用方法1.C->S:OPTION request //询问S有哪些方法可用1.S->C:OPTION respo...

2018-10-11 20:12:21 15245 1

原创 冒泡算法及其改进算法

冒泡算法及其改进算法冒泡算法介绍改进算法1改进算法2结果比较冒泡算法介绍冒泡算法的原理是:根据轻气泡不能在重气泡之下的原则,按一定顺序扫描数组:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。到此排序结束。比如对{6,2,3,1,7}进行冒泡排序(从小到大)第一次遍历结束后,结果为:1 6 3 2 7第二次遍历结束后,结果为:...

2018-10-11 13:48:33 12919

原创 Excel插件对话框中edit控件无法输入问题

Excel插件对话框中edit控件无法输入问题问题起因解决方案问题起因今天在做需求的时候,创建了一个全新的MFC非模态对话框,对话框中用到了edit控件,结果发现,在这个edit控件中输入任何的内容,都显示到了excel中选中的那个单元格中去了,而edit内容还是为空。因为edit也是我们重写的,只是给它加了个皮肤,功能是没有影响的,所以首先在OnChar那里打了个断点,发现并没有进来(edi...

2018-09-28 22:46:13 8342 3

原创 STL中的map容器屏蔽掉自动排序

STL中的map容器屏蔽掉自动排序map容器介绍屏蔽map自动排序map容器介绍template < class Key, class T, class Compare = less,class Allocator = allocator<pair<const Key,T> > > class map;key:关键

2018-09-25 16:02:16 20958 12

netbeans-8.1-cpp-windows-x86.exe

NetBeansIDE(集成开发环境)V8.1官方免费中文安装版

2021-08-26

Signal.rar

sigslot.h样例代码,支持linux编译,详细介绍请参见博客:https://blog.csdn.net/bajianxiaofendui/article/details/104579303

2020-02-29

RabbitMqTest.rar

RabbitMq的c++调用代码封装,vs2017编译环境,静态链接,代码中包含了debug和release的librabbitmq.4.lib文件,无需dll,如果需要适配不同版本的编译器,可以自己到官网下载RabbitMq c++源码即可。

2019-11-25

pexports.zip

Pexports是微软提供的一款工具,可以根据dd生成对应的def文件

2019-07-08

Windows核心编程(第5版中文版) 源码

Windows核心编程(第5版中文版) 源码;

2019-02-11

VC6.0中文安装包,以及Visual Assist X for VC6.0,本人一直在使用

VC6.0中文安装包,以及Visual Assist X for VC6.0,本人一直在使用;VC6.0中文安装包,以及Visual Assist X for VC6.0,本人一直在使用;

2019-01-15

C++读取Excel,就两个文件,里面有例子,可以直接使用

C++读取Excel,就两个文件,里面有例子,可以直接使用;

2019-01-10

IO完成端口使用样例

IO完成端口使用样例,结合生产者-消费者的设计模式,实现多线程的通信,代码很简单,适合初学者,编译环境为vs2015

2018-11-14

rapidxml实现xml文件的更改

rapidxml实现xml文件的更改,支持覆盖原文件,也支持生成新文件,编译环境为vs2015,内附使用说明

2018-11-14

libjpeg实现jpg图片大小改变

使用libjpeg实现的改变图像大小的功能,内部实现原理是哈夫曼压缩编码,编译环境为vs2015,内附使用说明

2018-11-14

CppCheck软件

CppCheck是一款c++代码检测工具,可以检测代码使用规范,以及内存泄漏问题,它是一款单独的应用程序,打开之后,直接选择c++工程,即可开始检测

2018-11-09

c++读取ini文件封装类

c++读取ini文件封装类,可以直接使用,简单易上手;

2018-10-23

RapidXml读取并修改XML文件

RapidXml读取并修改XML文件,封装成单独的类,可以直接使用,调用也非常方便

2018-10-18

C++ 多线程通信方式简介并结合生产者-消费者模式代码实现

C++ 多线程通信方式简介并结合生产者-消费者模式代码实现

2018-10-15

基于live555实现的rtsp点播客户端,并将实时视频流转存为H264文件

基于live555实现的rtsp点播客户端,并将实时视频流转存为H264文件

2018-10-11

MFC实现来回滚动效果的进度条

MFC实现来回滚动效果的进度条,vs2012的编译环境,完整代码,可以直接编译运行。

2018-09-21

空空如也

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

TA关注的人

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