随笔分类 -  C++

在windows不能正常使用boost og
摘要:现象:1. 在两个不同的dll中使用static的boost.log。在一个dll中的设置在另一个dll中没有起作用原因:core::get()返回的是一个单例。在不同的dll中是不同的对象解决办法: -DBOOST_LOG_DYN_LINK 阅读全文

posted @ 2014-02-04 18:15 李书淦 阅读(376) 评论(0) 推荐(0)

boost.asio与boost.log同时使用导致socket不能正常收发数据
摘要:现象:1。 没有使用boost.log前能正常收发数据2。加入boost.log后async_connect没有回调fix过程:1. gdb调试发现程序block在pthread_timed_wait.死锁? 使用helgrind没有检查出异常.2. 难道是内存错误? valgrind的memcheck也没有发现异常3. 重新编译boost为debug版, gdb调试发现 task_io_service的op_queue_works_的内存地址在使用boost.log前后居然从63070变成了63078。查看task_io_service.hpp发现一个outstanding_works_ 的 阅读全文

posted @ 2014-02-04 18:08 李书淦 阅读(2606) 评论(0) 推荐(0)

棋牌游戏服务器架构: 总体设计
摘要:首先要说明的是, 这个棋牌游戏的服务器架构参考了网狐棋牌的架构。网狐棋牌最令人印象深刻的是其稳定性和高网络负载。它的一份压力测试报告上指出:一台双核r的INTEL Xeon 2.8CPU加上2G内存和使用共享100M光纤的机子能够支持5000人同时在线游戏。 在研究其服务器框架后发现,它的网络部分确实是比较优化的。它主要采用了Windows提供的IO完成端口来实现其网络组件。本服务器虽然参考了其设计,但是还是有很大的不同,因为这个服务器框架主要是用在linux系统之上,而网狐棋牌是基于Windows平台的,严重依赖于windows sdk。这个架构延续了网狐棋牌在网络组件所作的努力,... 阅读全文

posted @ 2012-09-15 23:26 李书淦 阅读(13850) 评论(3) 推荐(5)

Postgresql源码分析: 动态Hash
摘要:postgresql 动态 hash 分析 阅读全文

posted @ 2012-09-13 22:02 李书淦 阅读(1480) 评论(0) 推荐(0)

一个简单地C++ Unit Test framework
摘要:一 使用先说一下如何使用这个framework。其基本用法和java的junit差不多,只是没那么强大而已。看一下下面所示的这个IntWraper 类:现在要给它写一个unittest ,你只要做如下工作就可以了:包含头文件: #include "FAssert.h"定义一个测试类,在这个类中使用下列宏来申明test case: DECLARE_AS_TESTER //申明一个类为tester,需要放在开头[必有] DECLARE_SETUP //申明一个setup方法[可选] DECLARE_TEARDOWN //申明一个teardown方法用于清理工作[可选] DECLARE_TES 阅读全文

posted @ 2010-12-26 12:24 李书淦 阅读(1702) 评论(0) 推荐(1)

用宏展开代码
摘要:“宏”这个玩意儿可能会触动很多人抵触的情绪,我也一样:很讨厌它。通常我不会用它进行计算,只有在合适的时候(比如能让我少打一些字,或者能增强代码的可读)才会请出它来。好了,言归正转,现在我要将一个代码片段有规律地重复N次,更具体点,就是在定义一个模板的时候,参数列表会很长,但是这些参数的名字是很有规律地:依次为typename T1,typename T2,....typename TN:在C++还没有支持模板的List参数(《C++ template》第13章)之前,我们可以利用宏来减少我们的工作量。  想一下吧,如果问题变了,现在的问题是要你写一个函数打印出上面的模板参数列表,你会怎么干?拿 阅读全文

posted @ 2010-12-18 10:23 李书淦 阅读(4403) 评论(1) 推荐(3)

用成员函数指针作为Callback
摘要:在带类的C中呆久了,还以为callback是静态或者全局函数的专利。有时为了让一个类的成员函数可以作为callback,不得不写一个静态函数,然后在这个函数的实现里面傻傻地调用一下那个成员函数。例如AnimateImage,这是一个从Widget继承下来的UI类,用来提供一种功能,定时地显示不同的图片,它的实现像下面这样.  class AnimateImage:publicWidget  {  public:   virtual void UpdateImage( void );   };  由于要求定时地更新图片,应该将UpdateImage加到一个定时器之中。在以前,我会这样来做这样事: 阅读全文

posted @ 2010-12-10 21:20 李书淦 阅读(1303) 评论(0) 推荐(1)

如何在模块中共享数据
摘要:在与业务逻辑相关的模块中,不同的类之间共享一些数据是再平常不过的事啦。在前两年的程序员生涯中,我主要采用过两种方式:使用数据管理类 我所在公司的应用程序框架使用的是MVC三层架构,由于历史原因,每个模板都由一个Model,一个controller加上一系列的View组成,所有要共享的数据都存在Model中,Model提供setter和访问接口: SetObject(int nObjectID,Object*pObject); Object*GetObject(int nObjectID); 这样,如果你要共享一个自定义的对象,拿AddressBook来说吧你需要做如下事情: 1) 从Obje 阅读全文

posted @ 2010-12-10 09:03 李书淦 阅读(1244) 评论(0) 推荐(0)

珍爱生命,远离野指针
摘要:C++程序员怎么远离野指针 阅读全文

posted @ 2010-09-06 09:16 李书淦 阅读(569) 评论(0) 推荐(1)