您的位置:首页 > 其它

【Boost】boost库中thread多线程详解6——线程组简单例子

2016-01-26 14:17 253 查看
    如果你需要创建几个线程,考虑使用一个线程组对象thread_group来组织它们。一个thread_group对象可以使用多种方法管理线程。首先,可以使用一个指向动态创建的线程对象的指针作为参数来调用add_thread方法,将这个线程加入线程组。也可以直接使用线程组类的create_thread方法,可不先创建线程而直接把线程加入到线程组中。当线程组对象的析构函数被调用时,它将删除(delete)所有这些通过add_thread方法加入的线程指针。所以,只能将堆上的线程对象指针通过add_thread方法加入线程组。remove_thread方法从线程组删除某个线程的指针,但是我们仍需负责把线程本身内存释放掉。线程组对象的成员方法join_all方法等待线程组中所有线程结束,才返回。

例子:

namespace
{
struct Run
{
void operator()(void)
{
std::cout << __FUNCTION__ << std::endl;
}
};

void run(void)
{
std::cout << __FUNCTION__ << std::endl;
}
}

void test_thread_group2()
{
Run r;
boost::thread_group grp;

// 两种方法通过线程组增加线程
boost::thread *t = grp.create_thread(r); // 使用create_thread
grp.add_thread(new boost::thread(run)); // 使用add_thread

grp.join_all();

// 两种方法移除线程
grp.remove_thread(t);
// delete t;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: