【发布时间】:2014-05-26 22:32:00
【问题描述】:
我希望能够在 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 函数的结尾,但我想如果有人知道这一点,我会问一下。
【问题讨论】:
-
为什么不只拥有一个带有析构函数的全局对象?
-
你考虑过
::atexit或std::at_quick_exit吗? -
@KerrekSB 这不一样。许多本身使用全局静态的库不能在 main 之外使用(静态初始化惨败)。所以 global 与 main 不同(看起来它确实对于 OP 的场景来说已经足够了)
-
@Chnossos 非常感谢!这正是我所需要的,即使在调用 main 函数之前设置它似乎也可以工作。
-
嗯,它与你的 main() 函数实际上并没有什么不同,它负责确保线程在退出之前退出。只是一种混淆问题的方法,您只希望 ::atexit() 函数以正确的顺序运行。顺序非常很重要。
标签: c++ multithreading c++11 boost ld-preload