我有一个后台工作线程,它不断处理数据
(使用std::thread
创建)
如果线程耗尽要处理的数据,则线程设计为等待 - 然后在mote数据可用于处理时恢复。
(使用std::condition_variable
)
如果此线程意外终止,我想确保线程以新的状态重新启动。
但我不知道如何检测线程终止或对其作出反应 处理这种情况的最佳方法是什么?
答案 0 :(得分:1)
线程只能以受控方式退出:线程本身决定退出,或者从另一个线程取消。唯一的另一种可能性是你的程序崩溃或一些外部杀手事件。
如果您运行不同的进程而不是线程,情况会发生变化。在这种情况下,是的,进程可能会意外退出,您需要弄清楚如何确定它是否存在。
如果您希望线程中的某些编码可能导致意外退出,则可能只是使用析构函数实例化一个保护类。后者可以做一些事情来通知你的系统线程存在:
struct Watchdog {
~WatchDog() {
restartMe();
}
};
void start() {
WatchDog watcher;
...
}
您可能尝试从析构函数重新启动线程,或者只是通知另一个需要重新启动此线程的观察程序线程。
原因是,对于单独的过程,您需要一种绝对不同的方法,即心跳ping或其他任何方法。