【发布时间】:2012-04-05 02:46:01
【问题描述】:
我能够打印在运行时捕获异常的线程的堆栈跟踪。我还需要打印在同一进程中运行的其他线程的踪迹。我有兴趣找到一种在一个线程中捕获异常后立即冻结所有线程的好方法。
现在,我所能做的就是查询每个活动线程,然后对其进行 SuspendThread()。但是,这将导致每个线程在捕获初始异常后执行更长的时间。有没有办法立即让每个线程挂起?
谢谢。
【问题讨论】:
-
用崩溃报告终止进程?您发送到另一个线程的任何类型的信号都需要时间。我想真正的问题是出于您的目的,什么是瞬时的,您如何快速获得信号?
-
我不认为“立即”一般来说是可能的,即使对于操作系统......例如,在多核/多处理器机器上,核心#2如何知道在何时停止其线程核心#1 的线程崩溃了?核心#1 必须向核心#2 发送“可疑线程”消息,此时核心#2 的线程已经执行了更多指令。
-
根据您的应用程序的架构方式,您可能能够使用光纤而不是线程。 (当然,你不希望在发布版本中这样做,但调试时可能没问题。)
-
线程默认是不同步的。谈论“立即”暂停其他线程是没有意义的,因为它们在不同的时间线上运行。只有在同步事件中才有“同一时间”、“之前”和“之后”的概念。
-
+1 为 Jeremy - 即使有操作系统支持也无法完成,原因正是所描述的 - 处理器间驱动程序必须中断运行其他线程的核心,而这不会发生'立即”。
标签: c++ windows multithreading