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) 编辑