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

In C++, is it possible to detect the unexpected termination of a thread?

本文关键字:线程 意外 终止 检测      更新时间:2023-10-16

我有一个正在处理数据的背景工作线程。
(使用std::thread创建(

如果该线程用完数据,则该线程的设计用于等待 - 然后在Mote数据进行处理时恢复。
(使用std::condition_variable(

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

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

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

如果您运行不同的过程而不是线程,情况会发生变化。在这种情况下,是的,该过程可能会出乎意料地退出,您需要弄清楚如何找出它是否存在。

如果您期望线程中的某些编码会导致出乎意料的出口,则可能只需使用驱动器实例化守卫类。后者可以做一些事情来通知您的系统线程的存在:

 struct Watchdog {
     ~WatchDog() {
          restartMe();
     }
  };
  void start() {
     WatchDog watcher;
     ...
   }

您可能会尝试从破坏者重新启动线程,或者只是通知另一个Watcher线程您需要重新启动此线程。

原因,对于单独的过程,您需要采用绝对不同的方法,即心灵ping或其他方法。