C++ 当一个线程遇到异常时,是否可以冻结所有线程
我能够打印在运行时捕获异常的线程的堆栈跟踪。我还需要打印在同一进程中运行的其他线程的跟踪。我感兴趣的是找到一种好方法,在一个线程中捕获异常后立即冻结所有线程 现在,我所能做的就是查询每个活动线程,然后查询其上的SuspendThread()。但是,这将导致每个线程在捕获初始异常后执行的时间稍长。有没有办法立即使每个线程挂起C++ 当一个线程遇到异常时,是否可以冻结所有线程,c++,windows,multithreading,C++,Windows,Multithreading,我能够打印在运行时捕获异常的线程的堆栈跟踪。我还需要打印在同一进程中运行的其他线程的跟踪。我感兴趣的是找到一种好方法,在一个线程中捕获异常后立即冻结所有线程 现在,我所能做的就是查询每个活动线程,然后查询其上的SuspendThread()。但是,这将导致每个线程在捕获初始异常后执行的时间稍长。有没有办法立即使每个线程挂起 谢谢。您是否尝试使用PostMessage()从捕获异常的工作线程创建GUI线程 建议的简短步骤: 1) GUI线程生成少量工作线程 2) 工作线程PostMessage()
谢谢。您是否尝试使用PostMessage()从捕获异常的工作线程创建GUI线程 建议的简短步骤:
1) GUI线程生成少量工作线程
2) 工作线程PostMessage()一旦捕获异常
3) GUI线程接收消息
4) GUI线程指示剩余的工作线程挂起 注意:定义您自己的消息 通过这种方式,在挂起工作线程之前,您仍然会看到一些延迟
另一种方法是在工作线程之间使用类似事件句柄的同步对象。是否使用崩溃报告终止进程?任何类型的信号发送到另一个线程都需要时间。我想真正的问题是,就你的目的而言,什么是瞬时的,你怎么能在那里得到那么快的信号?我不认为“立即”在一般情况下是可能的,即使是操作系统。。。例如,在多核/多处理器机器上,当core#1的线程崩溃时,core#2如何知道停止其线程?Core#1必须向Core#2发送一条“可疑线程”消息,此时Core#2的线程可能已经执行了更多的指令。根据应用程序的架构,您可能可以使用光纤而不是线程。(当然,您不希望在发布版本中执行此操作,但可能可以进行调试。)默认情况下线程是不同步的。谈论“立即”挂起其他线程是没有意义的,因为它们在不同的时间线上运行。只有在同步事件中,Jeremy才有“同一时间”、“之前”和“之后”的概念。对于Jeremy来说,这是不可能做到的,即使有操作系统支持,原因正是描述的——处理器间驱动程序必须中断运行其他线程的内核,而这不会“立即”发生。