Windows 为什么SEH被认为是“异步的”? 我在SEH结构化异常处理中读到的一些文章/答案认为它是“异步”的。p>

Windows 为什么SEH被认为是“异步的”? 我在SEH结构化异常处理中读到的一些文章/答案认为它是“异步”的。p>,windows,winapi,exception,seh,Windows,Winapi,Exception,Seh,据我所知,这些异常的整个处理部分都发生在CPU级别引发异常的线程上。基本上,一旦发生异常,执行“跳转”到在当前线程异常处理程序列表上迭代的操作系统代码 那么我的理解正确吗?SEH的异步到底是什么?在异常处理的同步模型中,异常总是显式抛出;一个实际的throw语句必须出现在源代码中,在指令流中的一个已知且明确定义的点上,这样编译器就知道什么时候会发生异常,这也意味着如果能够证明不可能发生异常,它可以优化异常处理代码 SEH是关于CPU触发的异常,代码本身没有意识到的事情可能发生,但可以说是在带外提

据我所知,这些异常的整个处理部分都发生在CPU级别引发异常的线程上。基本上,一旦发生异常,执行“跳转”到在当前线程异常处理程序列表上迭代的操作系统代码


那么我的理解正确吗?SEH的异步到底是什么?

在异常处理的同步模型中,异常总是显式抛出;一个实际的throw语句必须出现在源代码中,在指令流中的一个已知且明确定义的点上,这样编译器就知道什么时候会发生异常,这也意味着如果能够证明不可能发生异常,它可以优化异常处理代码

SEH是关于CPU触发的异常,代码本身没有意识到的事情可能发生,但可以说是在带外提出的。它是异步的,因为异常被注入到不知道它可能发生的代码中,这与在主线程中运行信号处理程序的方式非常相似,中断了接收信号时实际发生的任何事情


SEH可以被认为非常类似于临时注册的信号处理程序,其中异常条件是信号,_try块定义处理程序生效的位置,_except和_finally块是接收到信号时的处理程序。

在异常处理的同步模型中,异常总是显式抛出;一个实际的throw语句必须出现在源代码中,在指令流中的一个已知且明确定义的点上,这样编译器就知道什么时候会发生异常,这也意味着如果能够证明不可能发生异常,它可以优化异常处理代码

SEH是关于CPU触发的异常,代码本身没有意识到的事情可能发生,但可以说是在带外提出的。它是异步的,因为异常被注入到不知道它可能发生的代码中,这与在主线程中运行信号处理程序的方式非常相似,中断了接收信号时实际发生的任何事情


SEH与临时注册的信号处理程序非常相似,其中异常条件是信号,_try块定义处理程序生效的位置,_except和_finally块是接收到信号时的处理程序。

注意,SEH异常也可以由操作系统错误而不是CPU错误触发,请注意,SEH异常也可以由操作系统错误而不是CPU错误触发,也可以由用户代码通过RaiseException显式触发。