Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当一个线程遇到异常时,是否可以冻结所有线程_C++_Windows_Multithreading - Fatal编程技术网

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

C++ 当一个线程遇到异常时,是否可以冻结所有线程,c++,windows,multithreading,C++,Windows,Multithreading,我能够打印在运行时捕获异常的线程的堆栈跟踪。我还需要打印在同一进程中运行的其他线程的跟踪。我感兴趣的是找到一种好方法,在一个线程中捕获异常后立即冻结所有线程 现在,我所能做的就是查询每个活动线程,然后查询其上的SuspendThread()。但是,这将导致每个线程在捕获初始异常后执行的时间稍长。有没有办法立即使每个线程挂起 谢谢。您是否尝试使用PostMessage()从捕获异常的工作线程创建GUI线程 建议的简短步骤: 1) GUI线程生成少量工作线程 2) 工作线程PostMessage()

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

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


谢谢。

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

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

注意:定义您自己的消息

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


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

是否使用崩溃报告终止进程?任何类型的信号发送到另一个线程都需要时间。我想真正的问题是,就你的目的而言,什么是瞬时的,你怎么能在那里得到那么快的信号?我不认为“立即”在一般情况下是可能的,即使是操作系统。。。例如,在多核/多处理器机器上,当core#1的线程崩溃时,core#2如何知道停止其线程?Core#1必须向Core#2发送一条“可疑线程”消息,此时Core#2的线程可能已经执行了更多的指令。根据应用程序的架构,您可能可以使用光纤而不是线程。(当然,您不希望在发布版本中执行此操作,但可能可以进行调试。)默认情况下线程是不同步的。谈论“立即”挂起其他线程是没有意义的,因为它们在不同的时间线上运行。只有在同步事件中,Jeremy才有“同一时间”、“之前”和“之后”的概念。对于Jeremy来说,这是不可能做到的,即使有操作系统支持,原因正是描述的——处理器间驱动程序必须中断运行其他线程的内核,而这不会“立即”发生。