1

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

现在,我所能做的就是查询每个活动线程,然后对其进行 SuspendThread() 查询。但是,这将导致每个线程在捕获初始异常后执行的时间更长。有没有办法立即让每个线程挂起?

谢谢。

4

1 回答 1

2

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

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

注意:定义你自己的消息

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

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

于 2012-04-05T03:52:36.203 回答