- 博客(101)
- 资源 (12)
- 收藏
- 关注
原创 数据库粘合层--基于protobuffer
背景:最近在工作中,受到大量数据库操作的折磨。由于采用拼接字符串的方式来进行数据库操作,带来了每个数据库操作业务都需要提供一个接口,导致同一张表的操作需要一堆堆接口。比如表person_t有3个字段(age、name、sex),如果对age和sex做update,需要一个接口,如果对age的update那又需要一个接口,对name的update还需要一个字段。这种接口会根据业务不断衍生出来
2013-03-05 14:14:03 6531 9
原创 发布一套IOCP框架
更新:2010/08/211. 提供MemoryPool支持(详情请查看猛击这里)2. 模仿asio中io_service服务,把dispatcher接口公开出来,可以post任意回调3. 增强网络服务端demo2010/09/071. 提供AsyncResult的保存,减少内存申请复制2. 提供Timer组件,利用WaitableTimer,通过Dispa
2010-08-17 17:40:00 22344 82
原创 网络库的设计与实现
前言距离第一次发布iocpframework已经三年多了,这期间这款基于windows的网络库经过多次的修改,已经和第一版有非常大的区别了,但是整体思想架构并没有改变,这得益于当初对下载调度器的认识--模块应该是可替换的,这也是后话了。 在阅读本文的时候,希望你能有以下的基础:熟悉C++11 ,auto、decltype、lambda、type_traits、move等
2013-09-28 14:23:53 8478 10
原创 Object Pool(C++11)
这是一个简单易用的对象池,很多系统对资源的访问快捷性及可预测性有严格要求,列入包括网络连接、对象实例、线程和内存。而且还要求解决方案可扩展,能应付存在大量资源的情形。object pool针对特定类型的对象循环利用,这些对象要么创建开销巨大,要么可创建的数量有限。而且在pool中的对象需要做到无状态。 如何使用utility::object_pool_tint> pool1
2013-09-19 13:43:55 4303
原创 又一个lua与C++粘合层框架
背景:这是之前那篇烂文章的一个扩展吧!在游戏领域,特别多的使用到lua,作为C++的补充,当然会用到lua与C++的交互。lua提供了与C++交互的API,但是这些API各种坑爹、各种坑,各种繁琐,有的API操作了lua栈,有的却没有。为了解决lua原生API的问题,就出现了一些框架、库来改善,比如lua++,luabind…,窃以为,luabind是史上最强大的lua与C++粘合层,无出
2013-09-19 11:51:19 6599 2
原创 C++接口导出到lua组件
玩过lua的朋友肯定知道,C++要导出接口道lua里其实挺费事儿的,需要考虑lua调用C++后,栈如何弹出相应类型的参数,如何把C++的返回值压入lua栈。最麻烦,不省心且容易出错的就是导出一个接口就需要写一堆破代码。lua++?luabind?好吧,就当你们没用过!看看下面的接口,也就是你需要写的代码,如果觉得还行,下载下来一起讨论吧,你觉得呢? 这是注册时用的,st
2013-05-28 16:47:02 2377
原创 当std::ref遇到前置声明
当std::ref遇到前置声明话说,起因是这样的:有一个前置声明的类型然后又一个回调函数使用了一个session_t的引用(注意,在下面这段代码能编译通过)在这里,handler_(session,…)可以看成是一个std::function的对象,而handler的原型是[](network::session_t &, …){};在这里handler_只需要把sess
2013-05-14 09:32:12 2761
原创 C++11各种资源及个人见解
本文是专门针对C++新特性的见解,融合自己学习使用过程中的各种曲折。当然,如果你是反C++联盟或者各种逆反党人士均可以跳过 。其中,肯定有许多不恰当的地方,有很多偏见,但还望各位看官秉持该打就打,该喷就喷的原则,看不惯就就拍吧!首先,我力图以一种分类形式展现,把语言特性、库和各种最佳实践、Idiom方法介绍给大家。这里是关于C++11的一个资源清单,如果大家
2013-01-31 09:47:48 1892
原创 数据结果集的一种透传解决方法
一、背景很多同学都经历过这样一个应用环境:服务器把客户机的数据请求通过查询数据库得到了结果集,再把结果集返还给客户端。在这里,为了让服务器对客户端数据请求具有更方便的扩展或者收缩,需要让服务器不知道客户端每次返回的数据结果集格式。那如何才能让服务器在不知道客户端请求数据集格式的情况下还能扩展呢,也就是透明的二进制格式呢?想想,就是让查询的结果数据集进行序列化为一种通用格式,然后
2012-12-16 14:05:27 2026
原创 从operator<<谈函数重载决议
一. 背景项目中需要对数据库查询访问的业务,在写数据库sql语句代码时,由于没有特别复杂的格式化需求,决定采用C++标准库中的stream来进行sql语句的格式化。有两点好处:1). 类型安全2). 使用方便比如 std::ostringstream os;std::uint32_t id = 10;os "select * from user_t where id
2012-12-10 10:32:48 2001
原创 自己玩垂直搜索
前言由于业余爱好,想折腾一个垂直搜索引擎来玩玩,一方面想搞明白这里的水有多深(确实很深),另一方面满足自己的需要,去博客园,CSDN怕一些好文章来把玩把玩。从断断续续的玩了一个月的情况来看,有些成果,但是技术难点还在后见面。我也会不间断的补充完善,估计至少还需要1年的时间吧。如果你也希望能和我一起探索,请锁定本系列。但是你也无可避免的会和我一起走许多弯路(哈哈,被坑了吧),但是我所走的捷径
2012-06-27 13:53:05 1732
原创 共享Windows下C++库之异步http组件
简介最近在做一个crawler,为了更好的发挥抓取web的能力,需要用到异步http。其中DNS解析、下载都需要异步。 本组件基于WinHTTP实现,如果以后有需要再从头构造轮子吧(基于iocp的异步框架)。对于WinHTTP的思想,MSDN很多介绍,这里,这里说明该组件使用十分简单,只需要完成几种回调接口即可1. 完成HTTP HEADER2. 完成HTTP 整个
2012-06-05 11:11:35 5638 7
原创 数据库异步访问解决方案
基于前段时间研究数据库客户端的异步访问,发现1) ADO的异步回调通知并不能正常工作,相见这里,2) ODBC在3.8版本之前都不支持异步回调,详见这里3) OCI(ORACLE)也并不提供异步回调,只支持non-blocking模式,详见这里靠,这是什麽世界啊,大家都不用异步访问吗?大家对异步回调通知都实现的这么弱,让我情何以堪~ 对于中间件服务器访问数据库来讲,由
2012-05-10 17:54:26 7311
原创 公司培训记
公司培训后的一些感想,随便扯,想到哪儿写到哪儿来公司一月后,公司组织了为期两天的培训会。从公司背景到行业背景,从公司制度到项目管理,还有礼仪~。我也来普及一个常识性问题:脉搏 != 心率,人在运动后心率会快于脉搏,正常情况可以约等于脉搏。人怕三长两短,看病怕三长一短三长两短指的是未盖上盖儿的棺材,因为棺材正好由三块长木板、两块短木板构成一个匣子,以棺材来形容性命不保
2012-05-03 17:59:49 1857 1
原创 ADO Recordset数据集序列化
由于工作需要,使用ADO查询数据库,然后后把查询记录序列化到内存病通过网络传输到另外机器以便反序列化为Recordset。起先,使用MS提供的方式,需要IpersistStream、IStream、OleSaveToStream、OleLoadFromStream详情请看这里。嗯,很好,MS给出的例子很完美的测试通过~天有不测风云人有旦夕祸福,由于业务需要,必须在查询语句使用绑定变
2012-04-10 10:05:37 2968 1
原创 C++二进制兼容性
学习、工作中总结的条款,不喜勿扰~由于标准委员会一直没有统一标准的C++ ABI,导致各个厂商都有自己的一套体系,为了不出意外,循规蹈矩也有一定的必要,但可以斟酌,三思而后行。能:1. 可以添加非virtual函数2. 可以添加enum到class3. 可以追加enum值到已存在enum中4. 可以去掉private限制符没有被inline函数调用或者被使用的且
2012-02-29 09:53:14 2444
原创 共享Windows下C++库之序列化组件
简介:什么是序列化?简单来说,序列化就是将对象实例的状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它根据流重构对象。这两个过程结合起来,可以轻松地存储和传输数据。对象序列化反序列化通常用于:1. 将对象存储于硬盘上2. 在网络上传送对象的字节序
2011-10-16 22:34:40 2473 1
原创 共享Windows下C++库之线程池篇二
惭愧,很久没有来写点或者共享点有用的代码了,一来是工作很忙,二来也是自己懒惰。借今天国庆放假最后一天在家,把自己前段时间积累的点滴放在这里,以飨大家,如有不合胃口,那就唾之~。在上一篇中,我介绍了一种线程池实现方式(利用系统提供的线程池API)。在这里,我介绍一个自己实现的线
2011-10-07 16:21:22 3317
原创 Boost Asio在Windows下设计及实现解析
研究了许久ASIO,很不错!好话就不多讲,但是我认为作者为了跨平台,把代码弄得很拐弯抹角,但这也是不得已而为之。而这次的分析,只考虑Windows平台上的实现。我会陆陆续续的把整个设计思想和实现的关键代码给做出解析,然后判断其优劣,把认为可以去掉的就去掉,简化设计与实现!--因为我们只考虑Windows平台上的实现。 (还是先把图贴出来,最近都没时间写文章了) 设计类图 服务类图 socket相关类图
2010-08-17 17:41:00 5256 2
原创 共享Windows下C++库之线程篇
今天把平时积累的一些比较常用的库给共享出来,一来“展现”下自己的开源精神,二来也可以发表下自己的看法。(假设你熟悉C++ tr1的组件) 共享顺序 1.线程库(线程篇、线程池篇、线程同步与本地线程存储篇) 2.内存库(待续…) 3.网络库(待续…)
2010-06-07 21:59:00 2903 1
原创 一天一个CRT函数 strstr
1.介绍char *strstr( const char *str, const char *strSearch );需找str字符串中出现strSearch字符串位置的指针。如果没找到,则返回NULL,如果strSearch为空,则返回str。2.实现inline tChar *tStrStr(tChar *pStr, tChar *pSubStr){ /* First
2010-04-16 17:26:00 1723 1
原创 一天一个CRT函数 strrev
换工作了,一直在忙~1.介绍char *strrev( char *str );用途:翻转字符串,返回翻转后的字符串 2.实现/**** char *_strrev(string) - reverse a string in place Purpose: Reverses the order of characters in the s
2010-04-01 09:18:00 1007 2
原创 一天一个CRT函数 strpbrk
一晃就是2月底了,在上个星期里完成了辞职手续。然而气愤的是,距离职仅有两天的时间,项目组长居然给我布置任务!靠,我直接拒绝了!更令人感到惊讶的是,他告诉我这个任务是他们不愿意做,又做不了的一个棘手问题,让我来帮他们搞定!!我骂人了,懂不懂管理啊!废话不说了,看看strpbrk。1.介绍char*strpbrk( const char *string, const char *strCh
2010-02-28 14:59:00 1238 1
原创 一天一个CRT函数 _strlwr/_strupr
这是一组性格迥异的兄弟函数,_strlwr负责把字符串中所有字符转换为小写,_strupr把字符串的所有字符转换为大写。1.介绍_strlwr的原型为:char *_strlwr(char *str)_strupr的原型为:char *_strupr(char *str)长得都差不多,返回值也都是经过处理的字符串指针。 2.实现inline tChar *tStrL
2010-02-09 20:56:00 2252
原创 一天一个CRT函数 _strdup
快过年了,成都的天气不错,心情也很舒畅。我们接着来讲,_strdup是经常用来复制字符串的函数。1.介绍函数签名:char *_strdup(const char *strSrc)返回值:返回值向北复制的字符串的指针,所需空间由malloc分配并且必须手动free释放 2.实现inline tChar *tStrDup(const tChar *pString){
2010-02-08 23:14:00 1254 1
原创 一天一个CRT函数 strcspn
刚看到strcspn的实现时,很是惊诧!靠,这么优秀的算法,分析了老半天才搞明白。世界上为啥聪明的人这么多呢?1.介绍原型:size_t strcspn(const char *pstr, const char *strCharset)MSDN解释为:在字符串pstr中搜寻strCharsret中所出现的字符,返回strCharset中出现的第一个字符在pstr中的出现位置。简单的说,
2010-02-06 12:02:00 4118 4
原创 一天一个CRT函数 strchr
又过了好多天没有写这个系列了,哎,懒惰啊!今天太郁闷了,早上骑车上班时,被一辆小车突然打开的车门给绊倒了,还摔得不轻!strchr1.介绍MSDN上给出的解释是,找出字符串中指定的字符,返回第一个找到的字符位置的指针(即地址),如果没有找到则返回NULL。 1: /*** 2: char *strchr(string, chr) - search a str
2010-02-02 21:23:00 1559 2
原创 常见模板技术
这是在C++泛型编程(GP)时常常用到的技术,在工作学习中尽可以施展自己的才华。模板--一切皆有可能。1.隐藏参数细节模板代码和使用代码一般是这样: 1: templatetypename T> 2: class MyClass 3: { 4: private: 5: T m_val; 6:
2010-01-28 13:11:00 875
原创 整型映射和类型映射(节选自《Modern C++ Design》)
函数无法偏特化,但是却有重载。单从功能而言,重载是一个与偏特化相同的技术。 1: struct T1{}; 2: struct T2{}; 3: struct T3{}; 4: 5: void fun(T1 &fn); 6: void fun(T2 &fn); 7: void fun(T3 &fn);
2010-01-28 13:10:00 806
原创 一天一个CRT函数 _strdec
换操作系统了,Win7果然好用!而且对于每天12小时以上盯 着电脑的我来说,视觉感受也很重要!赞,一个字!来看看_strdec字符串函数吧,该函数比较两字符串,pStr1和pStr2必须指向同一source, 如果pStr2所指向pStr1的后面的字符,则返回pStr2前一个位置的字符地址,否则返回NULL。1.实现 1: /* 2: 比较两字符串,pS
2010-01-19 16:53:00 1570 2
原创 一天一个CRT函数 strcoll
来到重点介绍的章节了,String Manipulation。这个分类下的各函数都是处理以null-terminal结尾的字符串。来看看需要介绍的函数表strcoll按照指定locale设置比较两个字符串_strdec比较两字符串,返回指定字符串地址strcat把字符串加另一字符串strchr在字符串中寻找指定字符st
2010-01-15 14:38:00 1177
原创 一天一个CRT函数 __toascii tolower toupper
今天练习DataConversion剩余函数,涉及到abs、isascii、isspace、isdigit、isxdigit、iscntrl、isgraph、isprint、isalpha、isupper、islower、ispunct和toascii、tolower、toupper。厄,有点多,但是都很短小!也能从函数名知道该函数的作用(“顾名思义”)。1.实现 1: tem
2010-01-13 16:14:00 1180
原创 一天一个CRT函数 atoi
这一阵子真忙~年关将至,人也累死!前面已经说过,将字符串转换为数字其实就是做的字符串解析的工作,atoi也不例外。就是利用strtol函数来实现,若转换数字超过最大范围(LONG_MAX—LONG_MIN)则返回错误。原理如下:1)解析空格 tIsspace2)判断正负号 ‘-’or ’+’3)strtol判断转换进制 16进制、8进制、10进制4)解析数字字符
2010-01-12 11:41:00 1515
原创 一天一个CRT函数 atof
很久没写这个系列了,干脆换个名字叫“N天一个系列”(0 二、Data Conversion 函数 作用 atof 把字符串转换为float型数字 atoi 把字符串转换为int型数字 atol 把字符串转换为lo
2010-01-12 09:57:00 2355
原创 WTL实践经验总结(不断更新)
学习WTL快半年了,但是实际工作中根本用不到。一是因为公司不允许,二是有效的资源还比较少。通常情况下,自娱自乐的时候我还是选择WTL来做界面。在这里,我把平时学习实践过程中的东西(思想)保留下来,供大家参考,也可以互相进步。 这篇文章可能会很长很长,但是划分了4个模块: 一.WTL的使用 二.WTL的结构 三.WTL的剖析 四.WTL的资源 五.WTL的项
2009-12-29 16:52:00 2207
MemoryPool
2010-08-21
Windows IOCP框架
2010-08-17
RRDTOOL_For_Windows
2009-04-14
基于MFC的Mib文件解析
2009-03-21
TaskManager
2009-02-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人