【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;
}
例子:
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;
}
相关文章推荐
- centos下的网络设置
- 【Boost】boost库中thread多线程详解5——谈谈线程中断
- Centos7下安装samba
- 2、创建工程
- 解决IE9出现异常SCRIPT5011:不能执行已释放Script的代码
- C# 枚举的使用
- 如何让VS2012编写的程序在XP下运行
- Android Glide图片加载框架图片变色变绿解决方法
- 安装cocoapods,试验成功
- 管理-OKR
- 【Boost】boost库中thread多线程详解4——谈谈recursive_mutex
- Java控制语句——while语句
- s5pv210 u-boot启动过程
- 自定义转场动画
- 知识片段---textfield限制字符输入个数(包括汉子)
- YTU 2811: 打鱼还是晒网
- 关于地址转换
- oracle数据库表分区基本语句
- 【Boost】boost库中thread多线程详解3——细说lock_guard
- 设置字体的行距和大小颜色等