创建线程
boost::thread myThread(threadFun);
需要注意的是:参数可以是函数对象或者函数指针。并且这个函数无参数,并返回void类型。
当一个thread执行完成时,这个子线程就会消失。注意这个线程对象不会消失,它仍然是一个还处在它的生存期的C++对象。同理,当对一个堆上的线程对象的指针调用delete时候,线程对象被销毁,操作系统的线程并不能保证就消失。
放弃时间片
boost::thread::yield();
当前线程放弃余下的时间片。
等待一个线程
myThread.join();
调用这个方法的线程进入wait状态,直到myThread代表的线程完成为止。如果它不结束的话,join方法就不会返回。join是一个等待子线程结束的最好的方法。如果主程序不调用join方法而直接结束,它的子线程有可能没有执行完成,但是所有的子线程也随之退出。不调用join方法,主线程就不会等待它的子线程。
1 #include <iostream> 2 #include <boost/thread/thread.hpp> 3 #include <boost/thread/xtime.hpp> 4 5 struct MyThreadFunc { 6 void operator( )( ) { 7 // Do something long-running... 8 } 9 } threadFun; 10 11 int main( ) { 12 13 boost::thread myThread(threadFun); // Create a thread that starts 14 // running threadFun 15 16 boost::thread::yield( ); // Give up the main thread's timeslice 17 // so the child thread can get some work 18 // done. 19 20 // Go do some other work... 21 22 myThread.join( ); // The current (i.e., main) thread will wait 23 // for myThread to finish before it returns 24 25 }