c++在另一个线程中观察main()的结束

C++ observing the end of main() in another thread

本文关键字:结束 main 观察 另一个 线程 c++      更新时间:2023-10-16

我希望能够在c++中捕获主函数的结束,并在进程终止之前在另一个线程中执行额外的操作。

我一直在尝试获得主线程的句柄,然后加入它,但似乎std::this_thread/boost::this_thread不允许您访问当前线程的句柄

我想做的基本上是:

void thread_function(thread_handler) {
  thread_handler.join();
  < Perform extra operations before the program finishes its main function >
}
int main() {
  < thread_function thread started in LD_PRELOAD>
  ....  Program runs .....
  return 0;
}

在我的场景中,这两个函数没有共享状态,因为thread_function线程是在使用LD_PRELOAD的共享库中调用的,但是我可以从随后调用main()的线程中传递给它任何东西。这很可能是不可能捕捉到main函数的结束,但我想我应该问一下,以防有人知道这一点。

听起来您需要一个信号量,毕竟,您需要防止程序关闭,直到所有线程在程序退出时完成它们需要做的事情。

所以你需要主线程发出它停止的信号,然后等待其他线程(如果有多个线程)完成并报告它们已经完成。最简单的方法是设置一个事件来通知其他线程,然后等待,直到每个线程都发出了一个信号量,该信号量设置为将要等待的线程的数量。