1、thread的使用

  boost的thread包含了线程创建、使用、同步等内容,使用thread需要包含头文件"boost\thread.hpp"。

  thread中使用了需要编译的thread库,所以还需要添加thread库到项目附加库目录,在linux下链接thread库时还需要使用-lpthread选项来链接posix线程库。

  定义一个thread对象后,线程就开始执行。thread构造函数的第一个参数是一个函数或函数对象或function对象,剩余参数是传递给执行函数或函数对象的参数, 如果希望是引用传递的话则需要配合使用ref。

  成员函数join()和timed_join()可以用来阻塞等待线程执行结束,其中timed_join()可以指定等待时间。成员函数detach()的功能类似于posix的pthread_detach():创建一个线程后默认的状态是joinable, 如果一个线程结束运行但没有被join,会有一部分资源没有被回收。可以在创建线程后调用detach()将线程执行体分离,这样该线程运行结束后会自动释放所有资源,而不必使用join来阻塞等待线程结束。调用detach()将线程执行体分离后,成员函数joinable()会返回false,即线程的状态是非状态是非joinable。

  需要注意的是thread对象时不可拷贝的。

boost--线程
#include "boost\thread.hpp"

void PrintThreadFunc(const int& n, const string& str)
{
    cout << str << n << endl;
}

int main()
{    
    int n1 = 1;
    string str1 = "hello";
    boost::thread t1(PrintThreadFunc, ref(n1), ref(str1));

    int n2 = 2;
    string str2 = "boost";
    function<void()> fun = bind(PrintThreadFunc, ref(n2), ref(str2));
    boost::thread t2(fun);

    t1.timed_join(boost::posix_time::seconds(1)); //最多等待1秒
    t2.join(); //一直等待

    return 0;
}
View Code

相关文章: