当一个线程遇到异常时,是否可以冻结所有线程

Is it possible to freeze all threads when one thread encounters an exception

本文关键字:线程 是否 冻结 异常 遇到 一个      更新时间:2023-10-16

我能够打印在运行时捕获异常的线程的堆栈跟踪。我还需要打印在同一进程中运行的其他线程的跟踪。我感兴趣的是找到一种好方法,在一个线程中捕获异常后立即冻结所有线程。

目前,我所能做的就是查询每个活动线程,然后对其执行SuspendThread()。然而,这将导致每个线程在捕获初始异常后执行更长的时间。有没有一种方法可以立即导致每个线程挂起?

谢谢。

您是否尝试从捕获异常的工作线程使用PostMessage()来GUI线程?

建议的简短步骤:
1) GUI线程生成的工作线程很少
2) 工作线程PostMessage()曾捕获异常
3) GUI线程接收消息
4) GUI线程指示剩余的工作线程挂起

注意:定义您自己的消息

通过这种方式,在挂起工作线程之前,您仍然会看到一些延迟。

另一种方法是在工作线程之间使用类似同步对象的事件句柄。