2015年2月13日
摘要: template struct function_traits : public function_traits {};template struct function_traits { typedef ReturnType(*pointer)(Args); typedef std::functio... 阅读全文
posted @ 2015-02-13 10:48 阳光不锈 阅读(2611) 评论(0) 推荐(1) 编辑
  2015年2月11日
摘要: #include #include #include #include // Raw Bind - simulating auto storage behavior for static storage datatemplate class scoped_raw_bind{public: type... 阅读全文
posted @ 2015-02-11 10:54 阳光不锈 阅读(886) 评论(0) 推荐(0) 编辑
  2013年8月7日
摘要: 不使用理由1:跨平台。反驳:不成立。因为XCODEGCC都支持预编译头文件。不使用理由2:减少依赖,预编译文件中包含了很多头文件,一个cpp用不到这么多东西,他希望每个CPP精确最小包含需要的头文件。反驳:不成立。预编译头文件中的东西多,导致每个CPP依赖的东西多,但是这种依赖多,一般是不会有明显坏处的;因为预编译头文件中的东西的定位本来就是打算被普遍使用的,被依赖一般不会有明显坏处。不使用理由3:有时候想知道修改了一个头文件,影响了哪些东西。反驳:不成立。因为一般来说修改了函数,我们会搜索函数在哪些地方使用了;修改了类,我们会搜索类。这两者之外,想知道修改头文件的影响,这个情况很少,实战很少 阅读全文
posted @ 2013-08-07 22:51 阳光不锈 阅读(510) 评论(0) 推荐(0) 编辑
  2013年7月18日
摘要: 这个具体的应用场景就是QQ的历史记录管理器里面。当你点击某个联系人时,有个工作线程会去数据库查询对应的聊天记录,一次点击对应一个查询任务。1.当没有点击时,线程处于等待状态,一旦有点击,有查询任务,线程唤醒并执行任务。2.在线程执行过程中,如果用户又多次点击,只需要执行最后一个点击产生的查询任务即可。对应这个需求,我抽象出了一个多线程模型的实现。OnlyRunNewestTask.h---------------------------begin--------------------------------#pragmaoncenamespaceecs{namespacethreadModa 阅读全文
posted @ 2013-07-18 23:42 阳光不锈 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 有人在博文中写出程序流程:main(){init();//初始化while(1){step1:从系统消息队列中取一个消息step2:将消息发给指定任务处理}}每个任务的处理流程如下:xx_task_process(*msg){step1:分析消息类型step2:调用对应的处理流程step3:向系统消息队列发送消息return;}他是想说,每个任务的处理是互相独立的,如果有判空返回的防御,可让软件不崩溃,仅仅忽略一个任务的执行而已,将影响降到最低。但是实际的电信设备类软件(嵌入式软件)真的这么简单吗?真的可以做到完美的防御所有入参为空指针的情况吗?我觉得大部分软件,包括电信设备类软件(嵌入式软件 阅读全文
posted @ 2013-07-18 23:39 阳光不锈 阅读(649) 评论(0) 推荐(0) 编辑
摘要: 参数的编写涉及到很多注意点,包括传值还是传地址,传地址的话选择指针还是引用,是否添加const。1.传值还是传地址。 (1)如果是int这种简单内置类型,然后又不需要传出修改的结果的话,就用传值,如voidTest(inta);这时候毫无疑问不需要使用voidTest(contint*a);原因是函数编写和调用都麻烦,很诡异。但是有的人可能会想,是不是这样会提高效率。但是其实是错的,因为指针本身也是一个32位的值,就像int一样,所以如果是简单内置类型,这种情况还是选择老老实实的传值吧。有的人,包括曾经的自己会极端的试图使用voidTest(constint&a);也是以提高效率的名义 阅读全文
posted @ 2013-07-18 23:31 阳光不锈 阅读(767) 评论(0) 推荐(0) 编辑