boost thread类创建和销毁线程示例

boost thread

boost thread类使用简单,能够方便地管理整个线程的全生命周期,应用广泛。

thread配合ios使用时,能够方便地创建线程池,具体请参考boost::asio::io_service创建线程池简单实例

创建线程

对于一般的使用,是启动一个线程,运行一个函数,在函数内完成特定的任务。

#include <boost/thread.hpp>

void foo()
{
	cout << "foo" << endl;
}

boost::thread_group threads;
threads.create_thread(foo);

threads.join_all(); // 等待线程退出

如果是类的成员函数,可以结合boost::bind使用:

class Foo
{
public:
	void foo();
};

Foo foo;
boost::thread_group threads;
threads.create_thread(boost::bind(&foo::foo, &foo));

threads.join_all();
销毁线程

有时线程内执行的可能是个死循环,要想在指定的时刻退出该线程,thread也可以轻松做到。

如下程序,线程永远不会退出,程序会卡在等待线程退出的行,因为它永远也无法等到。

void foo()
{
	while(true)
		cout << "foo" << endl;
}

boost::thread_group threads;
threads.create_thread(foo);

threads.join_all(); // 等待线程退出

即使加上threads_.interrupt_all()也不行,因为没有在程序中设置退出点。

可以通过如下方法设置恰当的退出点:

void foo()
{
  try
  {
	while(true)
	{
		cout << "foo" << endl;
		boost::this_thread::interruption_point(); // 注册线程退出点,注册进thread类
	}
  } catch (boost::thread_interrupted&) {
        std::cout << "interrupted" << std::endl; // 线程会在这里退出
  }
}

boost::thread_group threads;
threads.create_thread(foo);

threads.interrupt_all(); // 退出线程,该行执行后,thread类会让线程在执行到退出点后抛出异常退出
threads.join_all(); // 等待线程退出

ok,这样线程就能正常销毁,并被主线程join。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值