在C ++中,是否可以检测到线程的意外终止?

时间:2018-02-16 18:53:03

标签: c++ multithreading exception exception-handling

我有一个后台工作线程,它不断处理数据 (使用std::thread创建)

如果线程耗尽要处理的数据,则线程设计为等待 - 然后在mote数据可用于处理时恢复。
(使用std::condition_variable

如果此线程意外终止,我想确保线程以新的状态重新启动。

但我不知道如何检测线程终止或对其作出反应 处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

线程只能以受控方式退出:线程本身决定退出,或者从另一个线程取消。唯一的另一种可能性是你的程序崩溃或一些外部杀手事件。

如果您运行不同的进程而不是线程,情况会发生变化。在这种情况下,是的,进程可能会意外退出,您需要弄清楚如何确定它是否存在。

如果您希望线程中的某些编码可能导致意外退出,则可能只是使用析构函数实例化一个保护类。后者可以做一些事情来通知你的系统线程存在:

 struct Watchdog {
     ~WatchDog() {
          restartMe();
     }
  };

  void start() {
     WatchDog watcher;
     ...
   }

您可能尝试从析构函数重新启动线程,或者只是通知另一个需要重新启动此线程的观察程序线程。

原因是,对于单独的过程,您需要一种绝对不同的方法,即心跳ping或其他任何方法。