织梦CMS - 轻松建站从此开始!

罗索

Boost线程启动

jackyhwei 发布于 2010-01-20 15:44 点击:次 
Boost线程的启动由传递一个没有构造函数的Callable类,之后复制到内存,由最新的线程调用.
TAG:

Boost线程启动
一. 线程启动
    线程的启动由传递一个没有构造函数的Callable类,之后复制到内存,由最新的线程调用.
struct callable
{
    void operator()();
};如果该类必须不可复制,那么可以用boost::ref传递一个Callable对象的引用到构造中.
boost::thread copies_are_safe()
{
    callable x;
    return boost::thread(x); //参数为X的一份拷贝
} // x is destroyed, but the newly-created thread has a copy, so this is OK boost::thread oops()
{
    callable x;
    return boost::thread(boost::ref(x)); //参数为X的引用
} // x is destroyed, but the newly-created thread still has a reference
  // this leads to undefined behaviour线程可以用一个函数或callable对象为参数构造,用boost::bind来实现
void find_the_question(int the_answer);

boost::thread deep_thought_2(boost::bind(find_the_question,42));
void print();
boost::thread t=boost::thread(&print);

二.线程接合与脱离
当被销毁时,线程称为脱离(detached),当线程为脱离(detached)时,线程继续执行直到构造函数中函数或callable对象执行完毕,或程式终止.
void print();
boost::thread t(&print);
t.join();//线程销毁
t.join();//线程已经失效,t不指向任何线程,无作用
std::cout<<boolalpha<<t.joinable()<<std::endl;//print false statement

线程的脱离可以明确调用boost::detach()函数,这种情况下线程为非现脱离线程(now-detached thread),变为非线程(Not-a-Thread).
boost::thread::join() //如果线程为中断(interrupted),引发boost::thread_interrupted异常.
boost::thread::detach() //不引发异常,如果线程不脱离,线程析构时调用.

(lifengjiang)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201001/8351.html]
本文出处:cppblog.com 作者:lifengjiang
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容