随笔分类 -  boost

摘要:bind 表达式中的是值语义还是指针语义?当我们传递某种类型的实例给一个 bind 表达式时,它将被复制,除非我们显式地告诉 bind 不要复制它。要看我们怎么做,这可能是至关重要的。为了看一下在我们背后发生了什么事情,我们创建一个 tracer 类,它可以告诉我们它什么时候被缺省构造、被复制构造、被赋值,以及被析构。这样,我们就可以很容易看到用不同的方式使用 bind 会如何影响我们传送的实例。以下是完整的 tracer 类。class tracer {public: tracer() { std::cout << "tracer::tracer()\n"; 阅读全文
posted @ 2012-06-01 20:43 ghost&240 阅读(289) 评论(0) 推荐(0)
摘要:Timer.1 - 使用同步定时器这个示例程序通过展示在定时器中执行一个阻塞等待来介绍Asio。让我们从必须包含的头文件开始。所有的Asio类只要简单的包含"asio.hpp"头文件便可使用。#include <iostream>#include <boost/asio.hpp>因为本程序中使用了定时器,我们需要包含相应的的Boost.Date_Time 头文件来处理时间操作。#include <boost/date_time/posix_time/posix_time.hpp>使用Asio的所有程序都至少需要一个提供访问I/O功能的io 阅读全文
posted @ 2012-05-31 22:43 ghost&240 阅读(2163) 评论(0) 推荐(0)
摘要:1创建线程就像std::fstream类就代表一个文件一样,boost::thread类就代表一个可执行的线程。缺省构造函数创建一个代表当前执行线程的实例。一个重载的构造函数以一个不需任何参数的函数对象作为参数,并且没有返回值。这个构造函数创建一个新的可执行线程,它调用了那个函数对象。起先,大家认为传统C创建线程的方法似乎比这样的设计更有用,因为C创建线程的时候会传入一个void*指针,通过这种方法就可以传入数据。然而,由于Boost线程库是使用函数对象来代替函数指针,那么函数对象本身就可以携带线程所需的数据。这种方法更具灵活性,也是类型安全(type-safe)的。当和Boost.Bind这 阅读全文
posted @ 2012-05-30 17:55 ghost&240 阅读(420) 评论(0) 推荐(0)
摘要:一、创建一个线程创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针。并且这个函数无参数,并返回void类型。 当一个thread执行完成时,这个子线程就会消失。注意这个线程对象不会消失,它仍然是一个还处在它的生存期的C++对象。同理,当对一个堆上的线程对象的指针调用delete时候,线程对象被销毁,操作系统的线程并不能保证就消失。放弃时间片 boost::thread::yield(); 当前线程放弃余下的时间片。等待一个线程 myThread.join(); 调用这个方法的线程进入wait状态,直到myThread代表 阅读全文
posted @ 2012-05-30 17:54 ghost&240 阅读(509) 评论(1) 推荐(0)
摘要:在boost根目录寻找boosttrap.sh并执行 如果不能执行就修改属性chmod a+x ./boosttrap.shsudo ./bjam "-sTOOLS=gcc" "--includedir=/usr/include" "--libdir=/usr/lib/boost" installsudo ./bjam --toolset=gcc --includedir=/usr/local/include --libdir=/usr/local/lib/boost install装完之后要到boost根目录下的/libs/rege 阅读全文
posted @ 2012-05-30 17:49 ghost&240 阅读(295) 评论(0) 推荐(0)
摘要:Regex头文件: "boost/regex.hpp"正则表达式常用于对输入数据的格式进行验证。应用软件通常要求输入符合某种结构。考虑一个应用软件,它要求输入一定要符合如下格式,"3个数字, 一个单词, 任意字符, 2个数字或字符串"N/A," 一个空格, 然后重复第一个单词." 手工编写代码来验证这个输入既沉闷又容易出错,而且这些格式还很可能会改变;在你弄明白之前,可能就需要支持其它的格式,你精心编写的分析器可能就需要修改并重新调试。让我们写出一个可以验证这个输入的正则表达式。首先,我们需要一个匹配3个数字的表达式。对于数字,我们应 阅读全文
posted @ 2012-05-30 17:48 ghost&240 阅读(646) 评论(0) 推荐(0)
摘要:使用protected可以保护不让生成对象,如A a;会编译错误,但可以A *a = new A;但此时如果delete a,也是会编译错误,所以总体来说还是错误的protected: virtual ~A() {}; shared_ptr不是线性安全的,因为存在一个引用计数.而intrusive_ptr是线性安全的,因为它要求我们自己写引用计数函数何时我们需要智能指针?有三种典型的情况适合使用智能指针: 资源所有权的共享 要写异常安全的代码时 避免常见的错误,如资源泄漏共享所有权是指两个或多个对象需要同时使用第三个对象的情况。这第三个对象应该如何(或者说何时)被释放?为了确保释放的时机是.. 阅读全文
posted @ 2012-05-30 17:47 ghost&240 阅读(335) 评论(0) 推荐(0)