提升线程完成回调可用

时间:2016-02-24 14:23:35

标签: c++ multithreading boost callback

我正在寻找一种方法来在一个boost线程(boost版本1.60,普通线程,没有线程组或池)完成时调用回调函数。我看过这个

How can I tell reliably if a boost thread has exited its run method?

但我需要某种回调。知道怎么做吗?我是否必须创建某种条件变量?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是包装原始线程函数:

#include <boost/thread.hpp>
#include <iostream>

void callback()
{
    std::cout << "callback invoked" << std::endl;
}

void orig_thread_func()
{
    std::cout << "thread function invoked" << std::endl;
}

void wrapper(void (*func)())
{
    func();        // invoke your original thread function
    callback();    // invoke callback
}

int main()
{
    boost::thread t(&wrapper, &orig_thread_func);
    t.join();
    return 0;
}

答案 1 :(得分:0)

也许您需要一个类似atexit的接口,用于在进程退出时注册回调。

因此,使用at_thread_exit,请参见this_thread.atthreadexit

用法:

void thread_exit_callback(){
  std::cout <<"thread exit now!" <<std::endl;
}

void thread_func(){  
  boost::this_thread::at_thread_exit(thread_exit_callback);
}

int main() {
  boost::thread t(thread_func);
  ...
  return 0;
}