c/c++相关
HopingWhite
这个作者很懒,什么都没留下…
展开
-
boost的asio中的buffer的使用
<br />在boost的asio库中比较重要的一点是使用buffer,它提供了一个对外的统一接口,就是streambuf,这个东西继承自std::streambuf,同std::streambuf一样,它有两个序列,一个是输入,一个是输出,以保证它同时可读也可写。当数据被写入时,它进入到输出队列,当读取数据时,它是从输入队列读取。因此asio::streambuf提供了两个函数commit:将输出队列的数据附加到输入序列尾部。consume,将输入队列的指针向后移动,表示这些数据已经被读取。<br />原创 2011-01-13 16:08:00 · 5837 阅读 · 2 评论 -
一个神奇的bug
这两天跟ios的flash分别调程序,同样的后端程序,flash端没啥问题,但是ios端就会有问题,会有一个人出现在两个地方的情况。事实上,我是用一个二维数组来存储人物位置的,但是ios端发上来的人默认是在14,20这个点,但是同时15,0这个点上还有一个同样的人今天查了好久之后,我突然悟了,md,我的数组开的是[100][20],这样的话,14,20可不就是15,0吗?果然没原创 2011-11-01 18:34:04 · 1148 阅读 · 0 评论 -
MotionWelder的Cocos2d库的一个bug
今天帮同事查Motion Welder的cocoas2d的库的bug,花了一天时间。bug是这样的,有一个动画A,如果一开始就播它,那么一点问题都没有,如果先播动画B,然后再播动画A,那动画A就会出现问题,主要表现为拼出来的图是乱的。 这个问题怎么解决呢?我虽然会c和c++,但是oc的独特语法读起来还是很困难的,更不要说cocoas2d的库了。所以先花了半天时间被了一下课,让自己看一些术语原创 2011-11-25 19:11:14 · 2157 阅读 · 0 评论 -
core dump的诡异事件
昨天在调一个程序时发现core dump出来的栈信息每次都不一样,当时就在想,这一定是一个很弱智的原因造成的,最终发现果然是一个memset写错了,将不该清空的内存清空了,导致执行的时候会进入不可状态。原创 2011-12-21 11:40:20 · 1543 阅读 · 0 评论 -
利用模板在编译时决定一个变量的类型
使用模板可以完成很多看起来很不可思议的事情,比如下面这个,可以在编译时实现静态类型判断 #include #include templateclass TypeChecker;template{ public: static const int TYPE = 1;};template{原创 2011-12-22 17:48:16 · 952 阅读 · 0 评论 -
在centos6.0下安装xen
http://www.centos.bz/2012/03/centos-6-install-deploy-xen/http://wiki.xen.org/wiki/RHEL6_Xen4_Tutorial转载 2012-04-24 20:48:31 · 1271 阅读 · 0 评论 -
linux下如何隐藏命令行参数
有时候会遇到这样的需求,不希望命令行的某些参数被ps出来,比如命令行参数里可能存在一些用户名和密码之类的东西,在linux下如果你想隐藏这些东西的话,可以直接将argv中的这些参数变成其他东西,比如xxxxx,下面是一个hideArg函数示例void hideArg(int argc, char** argv, const char* arg){ for (int i = 1; i <原创 2013-01-09 10:36:51 · 4102 阅读 · 0 评论 -
理解v8的Isolate调度
这两天看了一下v8的在多线程情况下多个Isolate的调度原理,别的不多说了还是先看一下测试代码吧#include #include #include #include using namespace v8;typedef struct _Args{ Isolate* isolate; char message[256];} Args;void* test(v原创 2013-11-07 18:45:37 · 10283 阅读 · 0 评论 -
rpath与ld_library_path
一般我们需要在编码中使用一些第三方的动态链接库,但是这些库不一定在标准查找路径上,这样我们链接的时候就必须指定-L参数,但是如果这样一来,在运行的时候就必须指定LD_LIBRARY_PATH环境变量,否则就会报找不到动态链接库。事实上ld在链接的时候有一个参数来指定运行时应该去哪儿找动态链接库,即-rpath参数,对于g++来说只需要指定-Wl,rpath=xxx即可原创 2013-11-14 17:10:22 · 2811 阅读 · 0 评论 -
如何使用c++的成员函数指针
假如我们有一个成员函数形如int test(int, string);那么我们可以定义类成员函数指针如下typedef int (A::*TMemFunc)(int, string);其中 A代表类名这样我们就可以声明TMemFunc a = &A::test;调用如下A b;(b.*a)(123,原创 2011-11-01 16:13:32 · 669 阅读 · 0 评论 -
又一个amfext的bug
今天又发现一个amfext的bug,请看如下数据结构array ( 'va_player_login' => array ( 0 => '=', 1 => array (原创 2011-10-26 17:00:47 · 1142 阅读 · 0 评论 -
类型转换带来的问题
<br />请看下面这段代码<br />#include <iostream>#include <boost/shared_ptr.hpp>#include <boost/asio/streambuf.hpp>#include <boost/cstdint.hpp>int main(){ boost::uint32_t intelligence = 57; boost::uint32_t base_damage = 24; boost::uint32_t random_d原创 2011-03-14 12:09:00 · 1256 阅读 · 0 评论 -
boost::bind的使用
<br />最近在几经波折之后,终于对于boost::bind有点理解了。对于习惯了其他语言的人来说,boost::bind是个挺神奇的东西,它可以将你的方法适配成任何其他的方法。其实这得益于c++的模板以及操作符重载,去看boost::bind的实现就会发现它是一个有n多重载的函数,这些重载主要是为了适应函数的参数个数。<br /> <br />其实boost::bind的原理是函数对象,而函数对象就是一个重载了()操作符的对象,这样我们就可以像调用一个方法一样来调用一个类上的这个操作符,比如a(),其实原创 2011-03-25 17:51:00 · 34559 阅读 · 7 评论 -
新项目,新架构
<br />新项目需要一个长连接架构的实现,而长连接对于性能的要求决定了用c或者c++来写比较靠谱,但是公司的技术人员组成决定了不可能用c或者c++来写业务逻辑,而且这个也不现实,会使得开发周期和维护成本很高。于是决定采用boost/asio + fastcgi + php来实现,也即前端有一个保持长连接的服务器,当前端将请求发上来之后,长连接服务器通过fastcgi协议将请求发给php,由php处理完成后再返回给长连接服务器,由长连接服务器返回给用户。<br /> <br />有人可能会说,这跟web服务原创 2011-03-25 17:25:00 · 1161 阅读 · 0 评论 -
c++中的智能指针实现
<br />今天和同事讨论了一下c++中的智能指针如何实现,后来又研究了一个boost::shared_ptr的代码,终于有了点眉目。<br /> <br />智能指针类,其实主要有两个参数,一个是所维护的指针,一个是引用计数,请注意,这个引用计数是一个指针,这个指针对外不可见,由智能指针类所维护。<br /> <br />智能指针类被赋值给别的变量时,这个引用计数会加1,当智能指针类被销毁时,这个引用计数会减1,当减到0时,这个智能指针所维护的指针变量会被销毁。是不是很简单?<br /> <br />但这原创 2011-03-25 17:56:00 · 1589 阅读 · 0 评论 -
boost的asio使用中的一个问题
<br /> 前两天在测试用asio写的模块时发现,在高压力情况下,内存使用很大,而且涨上去之后在低压力情况下内存依然没降下来。一开始以为是内存泄露,后来用valgrind查了半天,发现根本没有内存泄露的代码。<br /> <br /> 后来查了半天代码,推敲了很久之后,发现是其中的一个日志模块在打日志很多的情况下就会出现这个情况,这个日志模块是一个单线程的模块,为了防止日志不被写乱,通过post方法将多个其他线程的日志内容推到这个日志线程的中去。于是这个时候就比较容易理解了,多线程来喂原创 2011-04-06 23:12:00 · 2287 阅读 · 1 评论 -
c++中的typename真正用途
c++中的typename在一般情况下用于模板声明时可以用class来代替,但是这显然不是typename的真正用途所在它的正在用途是取消二义性,比如我们用如下函数 templatevoid dummy(K a){ K::iteator b;}原创 2011-08-13 16:42:47 · 953 阅读 · 0 评论 -
如何在ubuntu下使用eclipse cdt8.0
这两天将公司的电脑从windows换到了ubuntu,然后装了一个 eclipse cdt 8.0,结果发现根本无法使用,它无法识别c++以及c的头文件,这一点很奇怪,因为我在 windows下使用的时候是没有任何问题的,那么到底是怎么回事呢?原来问题出在了gnu环境下的两个环境原创 2011-10-18 15:28:36 · 2098 阅读 · 0 评论 -
智能指针在多线程情况下的问题
这两天在测试一个程序的时候发现,一旦压力达到一定程度,程序立即就会崩溃,报的错误几乎都在new的时候没有内存了,一开始以为确实是因为内存分配的问题,后来在程序运行过程中用top观察,发现内存使用很低,因此可以确认不应该是瞬间内存使用完造成的。因此认真看了一下core dump的地方,发现几乎都是在自己写的一个智能指针分配内存那里出的问题。于是仔细思考了一下,发现是因为智能指针的引用计数没有加锁导致原创 2011-10-22 13:36:06 · 5974 阅读 · 2 评论 -
cocos2dx windows phone平台下CCLabelTTF自动换行的实现(2)
前几天发过一篇文章说如何实现wp8下的CCLabelTTF如何自动换行,后来发现果如预料的那般,效果很不好,主要是非等宽字体的情况下看着很糟心,因此再修改了一版,效果要好很多了。具体实现其实就是参考initGlyphs,但是会不断的检查是否超过宽度,如果超过则自动换行。具体的直接看代码就明白了/**********************************************原创 2014-08-07 11:25:09 · 3451 阅读 · 1 评论