【发布时间】:2015-02-16 15:27:13
【问题描述】:
我知道 Windows 会为进程中的每个正在运行的线程单独构建一个结构化异常处理链。我想知道是否使用 veh,注册的异常处理程序将被称为进程范围(无论异常发生的威胁是什么)还是也按每个线程注册?
【问题讨论】:
-
这很容易自己尝试,启动一个线程并让它取消引用一个空指针。您的回调在触发异常的任何线程上运行。
我知道 Windows 会为进程中的每个正在运行的线程单独构建一个结构化异常处理链。我想知道是否使用 veh,注册的异常处理程序将被称为进程范围(无论异常发生的威胁是什么)还是也按每个线程注册?
【问题讨论】:
是的,向量异常处理程序是进程范围的。
来自MSDN:
应用程序可以注册一个函数来监视或处理所有 应用程序的例外。矢量处理程序不是基于帧的, 因此,您可以添加一个将被调用的处理程序,而不管 您在调用框架中的位置。
New Vectored Exception Handling in Windows XP by Matt Pietrek 表示:
处理程序列表不绑定到任何线程,并且是全局的 过程。
【讨论】: