学习boost
caimouse
在IT行业有20多年的经验。拥有20多年的C和C++开发经验,5年以上Python开发经验,资深数据库开发、上百G数据库优化经验。曾经任职嵌入式工程师、P2P开发工程师、银行信用卡交易系统工程师、全自动化电池测试部门经理。
展开
-
boost库在工作(16)线程之一
学习线程,得先了解线程是什么,线程就是程序执行中运行的最小单元,其实它就是一种轻量的进程,运行的效果跟进程一样,但它的创建和删除比进程要快得多。在现代的操作系统里,都是以线程作为最小的调度单位。在任何一个程序里,都至少有一个线程在运行的,如果没有线程,这个程序是没有办法执行起来。因此,线程就相当汽车里的发动机,如果汽车没有发动机,就没有动力输出,也就没有办法跑起来。因而,线程也与发动机一样是重要,原创 2013-03-24 19:44:59 · 3315 阅读 · 0 评论 -
boost库在工作(18)线程之三
前面的例子里, 由于cout输出并不是多线程安全的,如果多个线程同时输出,可能导致死锁的出现,因此在那个函数添加了一个boost::mutex锁,以便同步多个输出的线程,这样就不会造成死锁了。在这个函数里,还使用一个类boost::lock_guard,这个类是一个自动锁的类,所谓的自动锁,就是在构造函数里调用上锁函数,在析造函数里调用解锁函数,这样在这个类boost::lock_guard声明的原创 2013-03-31 11:40:01 · 3536 阅读 · 1 评论 -
boost库在工作(15)绑定器与函数对象之三
前面已经可以优美地解决两个参数的函数给算法for_each调用了,但是又会遇到这样的一种情况,当需要三个参数或者三个以上的参数给算法for_each调用呢?从STL里的绑定器bind1st,显然是不行了,因为它最多只支持两个参数,那还有什么办法呢?这时就需要使用boost库里强大的绑定器bind了。它不仅适用的情况比STL库里的多,还更加方便,更加人性化。下面就来看看怎么样绑定三个参数的类成员函数原创 2013-03-17 09:03:28 · 2856 阅读 · 0 评论 -
boost库在工作(17)线程之二
前面的例子,还是过于简单,只能学会使用一个线程来调用一个函数来运行。接着下来,我们提高一点要求,使用两个或两个以上的线程来运行同一个函数。多个线程运行同一个函数,其实就是线程池的概念,因为一个线程只能在一个CPU在里运行,如果有四个CPU,那么最高效率就是有八个线程运行,一般来说是CPU的个数的两倍是最高效率的线程模型。因此,我们开发的软件会在不同的客户电脑上运行,不同的客户那里的电脑配置又不一样原创 2013-03-30 22:09:04 · 5370 阅读 · 0 评论 -
boost库在工作(14)绑定器与函数对象之二
在STL库里使用算法for_each可以实现容器里每个元素都进行运算的操作,但for_each要求函数对象只能接收一个参数,如果需要传入两个函数时,就需要使用绑定器了。下面设想有这么一个需求,学校里老师给软件开发人员提了一个需求,要求把学生的数学成绩计算平均分,最后还需要计算每个人成绩跟平均分的差距,以便让每个学生看到自己成绩的好与坏。面对这个需求,就可以使用STL里的算法实现如下://使用bin原创 2013-03-11 21:23:45 · 2672 阅读 · 0 评论 -
boost库在工作(13)绑定器与函数对象之一
有一天,有一个同事过来问我,有没有办法把两个参数变成一个参数,然后传送给STL的算法模板使用。我想了一下,要把两个参数变成一个参数,只有一个办法,就是使用绑定器。其实绑定器就是把两个或两个以上的参数变成一个参数,也就是变成函数对象的方式。在STL模板库里提供两个绑定器:bind1st和bind2nd,这两个绑定器只支持两个参数,如果是两个以上的参数,就无能为力了。下面先来看看这两个绑定器的使用例子原创 2013-03-08 21:37:36 · 3056 阅读 · 0 评论 -
boost库在工作(1)第一个例子
C++是一门博大高深的语言,提供了众多编程模式,以及其技术,其中有一项重要的技术,叫做模板技术。所谓的模板,就是提供一套函数或类,其中参数或成员是没有定义为特定类型,由使用者来定义它的类型。最开始这项技术主要用来解决容器类的问题,比如int、float类型的容器,就需要编写两个类才能解决。而采用模板技术之后,就算有N种类型,只需编写一个容器类就解决了,这样不仅提高了开发效率,也减少了代码的编写量,原创 2013-01-31 23:34:44 · 3930 阅读 · 5 评论