如何使用boost :: thread :: at_thread_exit或在线程完成时调用函数

时间:2015-05-29 17:47:08

标签: c++ multithreading boost

这是一个用于说明我需要的最小代码。它不起作用,因为(正如编译时错误消息所说)at_thread_exit不是boost :: thread的成员。我知道与名称空间this_thread相关,我已经浏览了boost页面上的文档,但是无法遵循如何使用at_thread_exit。我还没有找到任何使用谷歌如何使用它的简单示例。

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

class A{
    public:
    void callme(){
        int a = 1;
    }
    void runThread()  {
        boost::thread td(&A::callme,this);
        td.at_thread_exit(&A::done,this);
        td.join();
    }
    void done() {
        std::cout << "I am done!!!\n";
    }
};

int main(int argc, char **argv) {
    A *a = new A();
    a->runThread();
    delete a;
    return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:2)

boost::thread td([this]{
  callme();
  done();
});

at_thread_exit仅适用于同一个帖子;否则它将需要同步,并且当只有一些线程使用它时,这将使每个线程为它付费。