我正在寻找一种方法来在一个boost线程(boost版本1.60,普通线程,没有线程组或池)完成时调用回调函数。我看过这个
How can I tell reliably if a boost thread has exited its run method?
但我需要某种回调。知道怎么做吗?我是否必须创建某种条件变量?
感谢您的帮助!
答案 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;
}