C++文章
文章平均质量分 78
在他乡奋斗
工作四年,一直从事C/C++开发工作
展开
-
腾讯云Https(SSL)证书申请与使用
腾讯云Https(SSL)证书申请与使用a. http代理可以级联,每个http代理负责管理自己的小网站。b. https部署在httpProxyServer级别,作为总入口,通过server访问子代理(client)的网站。c. 根据a,可以将一个较大的网站拆分成很多小型的网站开发,并且相互独立。d. 根据a,代理可以级联,进而实现逆向代理,既子代理(client)可以是局域网内的主机。e.根据b,所有网站都不需要考虑https部署,在入口处增加https.转载 2022-02-05 23:32:34 · 7975 阅读 · 0 评论 -
我们一起发布数据库
我们一起发布数据库1. 特别声明 本数据库没有依赖任何其他开源代码,全部自己在业余时间编写,当前只是实现了简单的增删查改功能,如果需要复杂查询,索引,自定义数据类型则需要自己开发。本源码仅限用于交流学习,任何商业用途都必须经过作者书面授权。 本人也正在开发V2版本,在V2版本中将可以任意扩展数据类型、数据存储、索引、函数,期待能够找到一些志同道合的朋友一块开发。 在使用本数据库时最好先了解下“标签驱动框架”,了解为何是标签,何为...原创 2021-10-20 08:22:56 · 303 阅读 · 0 评论 -
live555断流
最近在弄live555服务器的库,出现了断流的现象。我这边总结一下与大家一同分享。现象描述:布好Live555服务器后,在pc上用vlc播放视频OK,长时间不会断流。但是在嵌入式设备上播放却只能接收几秒钟的视频数据,然后就不再向客户端发送数据,直到超时断开。问题原因:在live555库中,RTPInterface::sendDataOverTCP函数中,当socke原创 2014-12-26 14:14:49 · 2440 阅读 · 0 评论 -
live555类关系图
注意:StreamState有两个,一个是结构体一个是类,其中结构体中的token=StreamState;一般如果有lookup的地方,表示该类的对象可以复用。原创 2015-03-24 19:36:38 · 968 阅读 · 0 评论 -
http服务器二次开发SDK
http协议能够将可见协议与二进制协议有效融合,并且其结构良好,分头域与实体两部分,而且头域的结构一致,并能够随意扩展。我们可以基于头域结构的形式,模拟MFC消息结构,设计一个高效,易扩展的解析架构。 本程序的设计初衷就是模拟MFC的消息机制来实现http头域的解析,并使得能够基于该结构实现私有协议的解析,实现http协议的基本框架,使得二次开发时能够基于该框架快速实现开发。 如果需要基于本架构实现http协议的二次开发,首先需要花时间区了解下http协议的基本结构。原创 2015-05-11 23:03:50 · 1526 阅读 · 0 评论 -
http服务器--session处理
http服务器--session处理1. 概述Session处理是一般带有会话功能服务器必须处理的功能.使用session记录一个会话,能够有效处理短连接或者断线重连的需求。session是存放在服务器的内容,具有如下特性:A. 时间性,创建的session如果长时间没有响应,则服务器需要删除该session,以防止session的无限增长。B. 唯一性,在同一个服务器上,sess原创 2015-06-01 23:08:35 · 2661 阅读 · 1 评论 -
Linux 线程锁详解
Linux 线程锁详解 原文地址在Posix Thread中定义有一套专门用于线程同步的mutex函数。 1. 创建和销毁 有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_转载 2015-06-12 20:35:44 · 462 阅读 · 0 评论 -
RTSP二次开发包
RTSP二次开发包概述RTSP开源代码属Live555最为权威完整,其单线程、socket控制、任务调度等思想值得我们借鉴。单线程消除了所有互斥量,极大提高了程序的运行效率。Socket控制让一个socket对应一个回调函数,多客户端的处理高效完成。任务调度是该开源的经典,单线程的基本实现就是依赖于任务调度,这对于我们以后研究消息机制会有很大的帮助。本二次开发包结合了Live555的基本思想,吸收MFC消息机制。原创 2015-11-29 13:24:53 · 866 阅读 · 0 评论 -
C语言最快吗
C语言最快吗 很多人认为C语言的运行效率是除汇编之外最高的语音,有段时间我也这么认为过,但我编程并不很在乎运行效率,因为很多时候并不需要高效。但昨天我写的脚步解析器运行结果,让我彻底放弃C语言是最高效的语言。 各种编程语言,无非就是解释顺序、判断和循环三个逻辑,谁解释的好,谁的效率就高,有些时候同样表意的代码,脚本都比C语言高效。但有些时候,你又不得不佩服C语言原创 2016-04-05 10:11:42 · 908 阅读 · 0 评论 -
快速全球索引
最近在弄GPS的东西,写了个GPS算法,模拟测试10万个数据源。之前详细了解过geohash,我在这算法的基础上优化了算法。不知道有没有更好的算法。若有,请不吝赐教。如下是我程序输出的:初始化 100000 个GPS 共消耗 172 毫秒100000个GPS 更新 10次共消耗 1031 毫秒在 100000 个GPS中执行矩形区域查询 100000 次,共消耗 6原创 2016-02-26 21:15:03 · 779 阅读 · 0 评论 -
geohash算法
geohash算法的原理是将区域进行4分,让后将每一块区域继续进行四分,直到符合精度要求停止,这样得到一个二进制的数据,然后将这二进制的数据进行base32转换得到一个字符串原创 2016-05-13 23:08:25 · 734 阅读 · 0 评论 -
脚本解析器
命令脚本解析器,自创建一种脚本语法,解释执行它。目前脚本形式类似于命令,没有变量类型的概念,关键字为=、$()、if、else、while、break、continue ,解释与C语言一样。原创 2016-05-07 10:18:43 · 5656 阅读 · 1 评论 -
基于时序数据库的GPS处理方案
运动中的GPS数据是典型的时序数据,是由设备在一段时间内连续间隔一定时间生成GPS坐标信息。少量设备的GPS信息处理可以用简单的算法处理,但对于成千上万的设备,就需要考虑算法的执行效率。特别是针对大量用于查询的情况下,例如公交车查询、物流查询等。 时序数据库解决了大量用户更新GPS和查询GPS的性能问题,特别是在附近点查询和最近设备的查询方面能够实现非常高效的性能,并且具有高效的截面数据查询,能够瞬时恢复某一时刻的整体场景。一般时序数据库支持的大量数据的插入与高效的单点查询,本时序数据库同样原创 2016-05-28 09:06:46 · 2333 阅读 · 3 评论 -
快速全球索引-最近n个点
最近完成查找离指定点最近的n个点的相关算法,效果没有预期的好,勉强能够满足要求。在10万个数据源中查找指定点最近的20个点,耗时1.6秒。原创 2016-07-06 21:29:45 · 718 阅读 · 0 评论 -
快速全球索引-百万数据源测试
对比可知,使用遍历法查询时间与数据源的个数成线性关系。但若使用索引查找,矩形区域查询成logN的关系,最近n点查询则时间基本固定。经过本测试也可认为,本算法可以使用在百万基本的数据查询中,能够提供非常高效的查询效率。如果使用集群处理,能够轻松处理亿级数据源的数据量。如果使用在普通的车辆位置查询上,则一台普通PC机即可满足要求。原创 2016-09-06 23:18:25 · 552 阅读 · 0 评论 -
vs环境配置属性介绍
vs环境虽然常有更新,但基本配置一致,所以这边使用vs2008的配置说明如下:常规配置调试属性:C/C++属性:链接器:原创 2017-01-19 21:27:07 · 480 阅读 · 0 评论 -
为什么快速排序比冒泡排序快
一般对于随机的乱序数字进行排序,我们会选择快速排序,网上也有很多关于快速排序、冒泡、选择、希尔、归并排序的性能对比。问为什么快速排序会比冒泡和选择排序快呢?先给个数学公式,对于不为零的整数m、n、k,并且满足n = m + k。一定满足如下公式: n的平方 > m的平方 + k的平方这也是快排快的原因。首先将n的长度分为m+k,然后m和k又继续分,如此递归下...原创 2019-01-14 19:55:33 · 5320 阅读 · 0 评论 -
live555单线程原理
Live555单线程原理1. 概述 在live555-Server库中,使用单线程实现了多用户请求视频数据,这似乎多线程才能实现的功能,并且用户请求视频数据各个流程衔接的都十分完美,其执行效率非常高。 live555是如何实现单线程的?其动力系统有什么借鉴的地方? 2. 动力系统原理一个无关的话题: 某人A有一堆任务要办理,但他一次原创 2014-12-19 10:14:33 · 2378 阅读 · 3 评论 -
应用程序正常初始化失败0xc0150002 错误
出现该问题,一般是由缺少什么库文件或者库文件不兼容导致的。我的开发环境为vs2008,并在程序发布时放入了vs2008的运行库(参考附件4.1)。编译另外一个测试程序,在一样的环境中运行,却没有问题。所以排除vs2008库的问题。 该问题可能出现在使用的库上,如果使用的Lib和其dll文件不一致也有可能导致该问题。我专门编写一个测试程序,测试使用的Lib文件。 特别注意:如果依赖的一个lib文件,如果不使用其方法,该lib文件会被忽略。原创 2014-11-12 15:45:11 · 2511 阅读 · 0 评论 -
CMFCTabCtrl 控件中的bug
作者:吴建凰 Email:wjh_2010@163.com,转载请标明出处,谢谢。最近在做VC的项目,由于VS2008之后增加了一些较为好用的控件,如CMFCRibbonBar、CMFCTabCtrl等,很多人vs2008之后的环境来写应用程序。但是我使用CMFCTabCtr原创 2011-09-11 10:56:41 · 4354 阅读 · 2 评论 -
base64 加密算法的实现
1. 关于base64编码Base64编码将3个8位的字符串转换为4个6位的字符串。转换后的编码用64个字符对应。在网上有很多关于base64加密解密的说法,我感觉很多不是真正的加密,因为如果不是自己设置密匙,总会觉得怪怪的,会认为是采用统一的密匙加密(这样就很容易破解了原创 2011-08-26 14:26:08 · 7960 阅读 · 1 评论 -
获取主机IP地址
以下代码的参考网上找的资料,具体哪个网页记不清了。希望对其他人有用。需要:#include "winsock2.h"#pragma comment( lib, "ws2_32" ) 代码如下:CString GetHostIp(){ char szHostName[128]; const char* pszAddr = NULL; struct hosten转载 2013-02-28 23:17:59 · 817 阅读 · 0 评论 -
安全可靠的3G传输中IP地址的解决方案
安全可靠的3G传输中IP地址的解决方案1.概述 采用3G网络做为传输方式时,会碰到服务器IP地址不可知的问题。如何解决这个问题,根据实际情况不同的公司或者个人会采取不同的方式。有中间服务器进行中转的方式,有采用绑定域名的方式(如绑定花生壳软件),有借用中间服务器保存服务器IP地址的方式等。各种不同的方式都各有优劣,这边我们提供一种节约成本、易扩展并且开发容易的解决方案。基原创 2013-03-01 00:00:33 · 1454 阅读 · 0 评论 -
解决QT程序触摸屏不可用的问题
情况说明开发版自带QT程序,开机能够显示界面,并且触摸屏可用。但是我自己编译好的程序放到开发板中,能够正确运行,触摸屏却不可用。在网上查了好些资料,对于我这个初学者很难入手,因为说明的操作过程不完整不清楚如何入手。问题分析在命令行中输入qt4可以执行,并且触摸屏可用。理论上来讲与我们自己的程序关系不大,主要是环境没有配置好。我们首先分析下qt4是如何执行的。一般输入qt4会在/原创 2013-05-16 17:17:36 · 9257 阅读 · 7 评论 -
编译sqlite动态库及测试
工程下载:http://download.csdn.net/detail/wjh_monkey/56610671.关于sqlite数据参考百度百科:http://baike.baidu.com/view/19310.htmSQLite是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。不像常见的客户-服务器范例,SQL原创 2013-06-27 20:30:21 · 2120 阅读 · 0 评论 -
Linux下发布QT程序
Linux下发布QT程序概述 无论在windows下还是在linux下,可执行程序的运行都依赖于相关的运行库,我们需要将依赖的库找到放到特定的位置,让可执行文件能够找到。在不知道可执行文件依赖哪些库时,有时可以让它自己告诉你,例如直接运行程序会输出缺少的库名,执行ldd命令查看可执行文件的依赖库。所以发布程序就是将必要的文件放到指定的位置,并修改某些系统配置。我发布的原创 2013-08-09 16:40:34 · 8440 阅读 · 1 评论 -
Ftp客户端概要设计
Ftp客户端概要设计1.概述 ftp是基于TCP的文件传输协议,主要是用于控制远程文件,如下载、上传、续传、重命名、删除等。其命令是基于可见字符,易于理解的方式交互的。客户端与服务器端的交互遵循一应一答的方式,而且各命令间遵循一定的顺序。FTP的应答原则:a. 所有应答都以3个数字开头以“\r\n”结束b. 一个应答的第4位如果为’-’,原创 2013-09-06 16:18:56 · 3776 阅读 · 0 评论 -
自定义WM_NOTIFY消息
自定义WM_NOTIFY消息习惯了用自定义用户消息进行各种状态的通知,特别是子窗口与父窗口之间的交互。但ON_MESSAGE没有控件ID的限制,如果有多个子窗口发送同一个消息给父窗口时,父窗口就不知道哪个窗口发的(当然可以用参数进行约定)。如何解决这个问题?有几种思路:1.重写ON_MESSAGE宏,增加ID的限制;2.模拟按钮单击消息;3.自定义WM_NOTIFY消息。基于这原创 2013-10-30 09:36:58 · 4562 阅读 · 0 评论 -
QTreeView的模型的写法注意事项
原文: http://johnsmith9th.iteye.com/blog/11780341. 写一个树型数据结构 2. 从QAbstractItemModel派生一个类,这个类包含或引用上述树形数据结构。 3. 至少实现 index, parent, data, rowCount和columnCount这5个纯虚函数。index和parent函数其实就是从树形数据结构转换出合适的Q转载 2013-12-06 11:50:20 · 975 阅读 · 0 评论 -
字符编码转换概要设计
本文主要讨论Unicode、GBK和UTF8的转换。在很多场合都需要考虑字符编码的问题,深入了解字符编码对编写程序有非常大的帮助。这篇文章中写的概要设计,并将其实现了。原创 2014-01-16 20:59:09 · 897 阅读 · 0 评论 -
模仿MFC消息驱动机制
欢迎向我索要模仿MFC消息驱动的实例源码,希望能与更多的人讨论。邮箱:wjh_2010@163.com 在微软推出的MFC架构中,其消息驱动机制是其精髓,使用简单,效率高,而且思路清晰。如果能够模拟MFC的消息驱动机制,并添加一些自己的消息映射(例如消息可以用字符串表示),那么在程序的移植上就会有非常大的帮助。原创 2014-04-03 23:01:30 · 1900 阅读 · 0 评论 -
中转服务器
中转传输采用3层设计,分别为:用户事件处理层、命令解析层、消息事件驱动层。在事件驱动层中,将相关消息发送给对应的用户事件处理函数处理。 在命令解析层中发送和接收数据。在接收到数据时,需要验证数据合法性,收到一帧完整的数据后调用消息驱动层的send相关方法,调用该类方法后会将消息传递给用户事件处理中。在命令解析层中,会引入socket控制,同时管理多个socket的读。 在用户事件处理中,需要像MFC那样,定义消息处理的映射表。只有在用户层定义了消息映射表,命令解析层接收到的命令才能被处理,否则被原创 2014-04-20 20:25:29 · 4793 阅读 · 0 评论 -
x264内存泄露的解决办法
也许我使用的x264库比较原始,但经过测试,x264的库存在内存泄露.面对内存泄露,如何在尽量少改动的前提下解决这个问题。下面是我解决的思路:由于x264相关的内存分配与释放都有封装一层函数,我们可以在从这两个函数入手。将分配的内存记录到一个链表中,释放时从链表中删除。程序执行完后,如果链表中有记录,说明是内存泄露,清空链表即可。所以具体操作如下:1.增加一个链表;2.修改x264_malloc函数,将分配的内存记录在链表中;3.修改x264_free函数,从链表中释放节点;4.最后统一原创 2014-05-10 21:12:17 · 2095 阅读 · 0 评论 -
最大公约数算法
摘自x2/**************************************************************************** * x264_reduce_fraction: 求出最大公约数,并约去最大公约数 *********************************************************************原创 2014-05-07 13:51:53 · 532 阅读 · 0 评论 -
include自身
作者:吴建凰 wjh_2010@163.com如需转载请声明出处:http://write.blog.csdn.net/postlist最近写代码遇到这样的麻烦事,文件A中需要多次保护文件B,如下:#ifdef MFH_DLL_DEF#undef MFH_DLL_DEF#endif#define MFH_DLL_DEF MFH_DLL_FUN_TYPE原创 2014-06-22 21:56:04 · 909 阅读 · 0 评论 -
代码应该具有什么样的结构
这段时间在设计一个项目的代码结构。之前设计结构时很注意回调函数,的确回调函数能够解决模块间的耦合问题。但今天突然觉得,我们的代码结构应该像一个食物链,层次分明。这样维护起来就比较好。上层通过方法可以知道下层的属性,并依赖下层,但下层不能依赖上层。就像兔子和草的关系。如何设原创 2011-09-09 11:38:40 · 1283 阅读 · 1 评论