编程语言
文章平均质量分 69
viewcode
first level:code
展开
-
printf使用隐患
平时习惯使用iostream中的cout,很久不用printf, sprintf, fprintf等格式化输出的方法了,不过,最近的一次使用,发现自己一个错误的用法,造成安全隐患。longbyte a;float b;...printf("a: %d, b: %f\n", a, b);a是一个长字节的自定义类型数据,b是一个float型数据。日志里,输出的结果都不正常,原创 2012-08-15 16:19:06 · 1666 阅读 · 0 评论 -
vector的back()函数
stl中vector的back()函数返回最后一个元素,如:commentPtr &comment = comments.back().原创 2014-12-22 17:39:04 · 32796 阅读 · 1 评论 -
回调函数、同步、异步、阻塞、非阻塞、D-BUS等概念的理解
同步、异步与阻塞、非阻塞这个几个概念很容易被混淆。这些概念基本都是使用在多个部件进行协作或需要在一定时间内完成的场景中。以前用过一个叫DSI的机制,用于分布式系统间的数据传递,能运行与Q-net和Socket之上,是一个master-slave的网络结构。不过这是一个私有的库,资料较少。对应的开源的机制是D-BUS,只不过dbus是用于桌面应用程序之间的进程通信,或进程与系统内原创 2014-03-17 18:04:23 · 8696 阅读 · 0 评论 -
一个显示模块的设计
场景: 单系统,多线程。一个线程生成数据,另外一个线程接收生成的数据,并调用显示库函数,将数据显示。目的:在显示器中显示数据库:嵌入式显示模块开发库现有结构: 显示模块运行,整理为一个单独线程。它需要其他模块传递数据。初步设想:将整个显示模块设计为一个singleton单例类,两个线程都可以调用。一个线程用于调用显示接口,另外一个线程调用数据更新接口。两个线程之原创 2013-02-28 17:58:49 · 1786 阅读 · 1 评论 -
制定开发目录结构
平时开发一般都处于单平台、集成的IDE环境下。因此,基本上采用的是默认的开发目录结构。无论VS,或QNX集成开发环境,都默认采用的是源码及工程文件都放在一个工程文件夹之下。在单平台下,这种组织方式没有问题,而在多平台下,不同平台的工程文件就会混在一起。所以尽量将不同平台的工程文件分离开来。一般开发的文件的分类:头文件源码文件引用的库文件/程序文件编译文件/工程文件原创 2013-02-28 17:29:03 · 1189 阅读 · 0 评论 -
程序中时间的表示及时间函数的的选择
时间系统一般在程序中有以下几个层次:1. 绝对时间2. 本机系统时间3. 本进程运行时间4. 用户自定义的时间(差分系统时间)根据不同的精度需求一般又分为:1. 日历时间2. 高精度时间根据场景不同,又可分为:1. 单系统,单线程2. 单系统,多线程(多进程)3. 跨系统,多线程(多进程)linux系统与windows系统又略原创 2013-02-25 10:12:59 · 3912 阅读 · 0 评论 -
多线程编程中需要知道的操作系统的概念
操作系统也曾看过几遍了,但始终未能透彻理解信号量、互斥、管程、消息传递等概念。现在有时需要多线程编程,回头再看这些概念中体现的解决方案,有点感觉了。多线程编程经典问题:消费者和生产者共同使用一些资源问题(或读写一段共享内存问题),如何避免竞争条件(线程可能永远睡眠),死锁问题。理解这些问题的前提假设: 中断:一个线程刚执行一个操作(一个指令),就被中断(有可能是原创 2013-01-17 10:50:47 · 4451 阅读 · 0 评论 -
CV_EXPORT定义的作用,lib及dll的区别
在core.hpp中,CV_EXPORT是出现频率最高的词之一。1. CV_EXPORT是什么? 有什么用?2. CV_EXPORT会涉及到dll的东西,那么dll是什么,lib与dll的区别是什么?CV_EXPORTS 出现的用法:class CV_EXPORTS MatExpr;template class CV_EXPORTS Size_;原创 2012-09-27 10:29:11 · 10393 阅读 · 3 评论 -
observer、listener模式的推与拉
导读:1. observer模式简介2. 两种实现方式:推与拉observer模式简介observer模型,又被称作listener模式。这里统一用observer来称呼。设计模式里对其结构的描述:意图:一个对象变化,通知其他被依赖的对象。适用性:两种对象subject与observers,相对相互独立,有单向依赖关系,observer依赖s原创 2012-12-05 17:47:37 · 5813 阅读 · 0 评论 -
将开源libosmscout移植到QNX遇到的问题和解决方法
大费周章将libosmscout在vs平台上编译成功了,虽然已经有了readme编译手册,但是其依赖的其他开源库较多,一点的差错都不能有。若将libosmscout移植到QNX,一个新的平台上,发生什么意外都不奇怪了。所以libosmscout里几个工程,只选取最基本的,不依赖其他库的libosmscout工程进行移植。这里总结下移植过程中遇到的问题:1. 随时准备调整conf原创 2012-11-16 15:57:17 · 2122 阅读 · 0 评论 -
应用Python写的一个简单的Class代码生成器
平时苦于写一下C++类或数据结构时时,每个类都需要四五个与类相关的构造、析构函数。每次重复的写些类名和变量名,费时费力。若将这些函数省略,代码风格不好,又不安全。经常见一些代码生成工具,只需定义类名,变量,函数,就能生成比较完善的代码。格式统一,漂亮且安全。不过这些工具都与自己的框架或编译系统相关,通用性不是很好。最近想学习下python的应用,就尝试自己写一个简单的Class代码生成器。原创 2012-11-29 18:04:26 · 4205 阅读 · 0 评论 -
visual studio中使用环境变量
1. 什么是环境变量2. 如何使用环境变量3. 在visual studio中使用环境变量的示例什么是环境变量环境变量,通俗的说是为一个或一些路径起一个变量名。在软件和工程设置使用中,这些环境变量名称在不同的计算机上可以不变,而其变量值,即代表的路径可以变化。这样软件的移植性相对较好。但增加了需要理解环境变量这个概念。环境变量包括系统环境变量,用户环境变量,软件或工程的原创 2012-11-09 18:22:14 · 18226 阅读 · 0 评论 -
函数指针,function,bind, lambda
函数指针,sd::function functionObject, std::bind()1. 函数指针是类型不安全的,为什么?#includeint max(int x,int y){return (x>y? x:y);}int main(){ int (*ptr)(int, int); int a, b, c; ptr = max; sca原创 2015-02-27 18:25:17 · 2531 阅读 · 0 评论