在 C++ 中,是否可以检测线程的意外终止?
In C++, is it possible to detect the unexpected termination of a thread?
我有一个不断处理数据的后台工作线程。
(使用 std::thread
创建)
如果线程用完要处理的数据,线程将等待 - 然后在 mote 数据可用于处理时恢复。
(使用 std::condition_variable
)
如果此线程意外终止,我想确保线程以全新状态重新启动。
但我不知道如何检测线程终止或对其做出反应。
处理这种情况的最佳方法是什么?
线程只能以受控方式退出:线程本身决定退出,或者被另一个线程取消。唯一的其他可能性是您的程序崩溃或某些外部杀手事件。
如果您 运行 不同的进程,而不是线程,情况就会改变。在这种情况下是的,该进程可能会意外退出,您需要弄清楚如何确定它是否存在。
如果您预计线程中的某些编码会导致意外退出,您可以使用析构函数实例化一个保护 class。后者可以做一些事情来通知你的系统线程存在:
struct Watchdog {
~WatchDog() {
restartMe();
}
};
void start() {
WatchDog watcher;
...
}
您可以尝试从析构函数中重新启动您的线程,或者只是通知另一个观察线程您需要重新启动这个线程。
当然,对于单独的进程,您需要一种完全不同的方法,即 heartbit ping 或其他任何方法。
我有一个不断处理数据的后台工作线程。
(使用 std::thread
创建)
如果线程用完要处理的数据,线程将等待 - 然后在 mote 数据可用于处理时恢复。
(使用 std::condition_variable
)
如果此线程意外终止,我想确保线程以全新状态重新启动。
但我不知道如何检测线程终止或对其做出反应。
处理这种情况的最佳方法是什么?
线程只能以受控方式退出:线程本身决定退出,或者被另一个线程取消。唯一的其他可能性是您的程序崩溃或某些外部杀手事件。
如果您 运行 不同的进程,而不是线程,情况就会改变。在这种情况下是的,该进程可能会意外退出,您需要弄清楚如何确定它是否存在。
如果您预计线程中的某些编码会导致意外退出,您可以使用析构函数实例化一个保护 class。后者可以做一些事情来通知你的系统线程存在:
struct Watchdog {
~WatchDog() {
restartMe();
}
};
void start() {
WatchDog watcher;
...
}
您可以尝试从析构函数中重新启动您的线程,或者只是通知另一个观察线程您需要重新启动这个线程。
当然,对于单独的进程,您需要一种完全不同的方法,即 heartbit ping 或其他任何方法。