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

时间:2012-04-05 02:46:01

标签: c++ windows multithreading

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

现在,我所能做的就是查询每个活动线程,然后查询SuspendThread()。但是,这会导致每个线程在捕获到初始异常后执行一段时间。有没有办法立即导致每个线程暂停?

感谢。

1 个答案:

答案 0 :(得分:2)

您是否尝试将PostMessage()用于来自工作线程的GUI线程,该线程被捕获异常?

建议的简要步骤:
1)GUI线程产生一些工作线程
2)工作线程PostMessage()一旦遇到异常
3)GUI线程接收消息
4)GUI线程指示剩余的工作线程暂停

注意:定义自己的消息

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

替代方法是在工作线程之间使用同步对象,如事件句柄。