使用C++在Windows/Linux下精确计时

在Windows和Linux下有多种计时方式,包括Windows定时器(精度大约在15ms),借助CPU的多媒体定时器(精度在1ms左右)。然而在计算机主板上都有专门的时钟芯片,可以提供极为精确的时间,在选择计时方式时,要考虑到,获取约精确的时间,就要耗费更多的资源,在实际编程时应根据使用条件选择合理的计时方式。这篇博客将介绍Windows/Linux下获取精确时间的方法,并提供一个封装较好的简单计时类。

阅读更多

进程间通信(内存映射)方式传输CV::Mat图像数据

关于内存映射的进程间通信,我直接一篇博客已经详细介绍过,这里只是再次补充一个传输图像的应用,因为OpenCV中Mat格式较为常用(并且也很方便传输),刚好用到,就做个笔记好了。应用的场景是B进程中的Mat传给A进程,A进程接受并恢复为Mat格式。其它也没什么好说的,有细节为题就参见我之前的博客,那么开始吧。

阅读更多

MFC/C++多线程

操作系统中线程和进程的概念就不再强调,这篇博客主要介绍在Windows中多线程的创建、挂起、终止、通信、同步,大都是代码层面的介绍,这也是个人的笔记,摘抄自网络。

如果对这些概念不熟悉,建议先移步百度,或者操作系统教材,如果你支持查阅手册或者API参数讲解,那么希望这篇博客能给你答案。话不多说,开始吧。

阅读更多

Protobuf反射详解

所谓反射机制,就是能够在运行时知道任意类的所有属性和方法,能够调用任意对象的任意方法和属性。这种动态获取的信息以及动态调用对象方向的功能称为反射机制。

不像Jave等语言,C++本身没有反射机制,在使用C++版本Protobuf时,protobuf通过proto文件产生响应的message和service,protobuf可以通过proto文件提供反射机制,程序在运行时可以通过proto获取任意message和任意service的属性和方法,也可以在运行时调用message的属性和方法。

阅读更多

ROS学习笔记(一)ROS环境搭建

ROS:Robot Operating System

ROS是开源的机器人次级操作系统,其设计的首要目标是在机器人研发领域提高代码复用率,是一种分布式处理框架(Nodes)。它提供类似于操作系统所提供的功能,包含硬件抽象描述、底层驱动程序管理、共用功能执行、程序间的消息传递、程序发行包管理等。

ROS提供多语言支持,利用简单的、语言无关的接口定义消息传送。ROS还利用了很多已经存在于开源项目的代码,如OpenCV中借鉴视觉算法、从OpenRAVE借鉴了规划算法等。DJI、iRobot等机器人公司都在使用ROS。

阅读更多

Sublime中设置Protobuf语法支持

Sublime是一款优秀的编辑器,强大的拓展使得数十种语法的高亮提示和自动补全成为可能。Protobuf谷歌的数据交换格式,独立于语言,非常易用。在Sublime中可以通过扩展插件的方式设置Proto文件的语法高亮,这对于常常使用Protobuf的开发者有很大帮助。

阅读更多

C++Intel/VS编译器编译Boost库

        在使用Intel编译器(icc)时,如果还想调用Boost库,那么icc会自动调用icc编译的boost库,于是这篇博客就介绍了如何使用icc编译Boost库,并且附带Boost库编译时的参数说明,你可以按照这份说明编译出你想要的库版本。(如果你使用默认编译器,此博客也可做参考,除了编译器选择部分不同之外,其它都一样)

阅读更多

快速配置gflags/glog/protobuf

        如果你已经配置好opencv,那么下载安装包,自解压到和opencv一样的目录,你在配置opencv时,这些库由于和opencv共享目录,所以也就顺便配置好了,然后就是需要手动链接库,lib列表已经在压缩包中存成txt文档,所以配置就是copy一遍就可以了,另外注意,博主只编译了MD的库,如果你习惯使用opencv静态库,可以下载源码自行编译,也可以参照博主原来写的博客,所以库都以MT方式编译了。另外,还需要安装Intel编译器。

阅读更多

Intel IPP库配置教程

        了解OpenCV的同学应该都对IPP加速有所耳闻,IPP库是Intel的加速库,其中集成了多种高性能的操作,基于CPU庞大复杂的指令系统,对程序做并行优化非常有帮助(有点类似于DSP上的数学库),相比之下,另一种并行加速方式openmp就显得捉襟见肘了。这篇博客将帮助我们配置IPP库。

阅读更多