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对象时不可拷贝的。
#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; }