河北建设工程招标网,seo怎么做网站优秀案例,自己做网站大概多少钱,网站后台怎么做图片链接首先要要知道#xff0c;结构化异常处理(SEH)和C提供的异常处理不相同。一.Termination HandlersTermination Handlers使用很简单。在想使用SEH处理的地方使用__try{/* [__leave;] */}__finally{/* [AbnormalTermination] */}即可。SEH保证#xff0c;无论__try中的代码怎样退…首先要要知道结构化异常处理(SEH)和C提供的异常处理不相同。 一.Termination HandlersTermination Handlers使用很简单。在想使用SEH处理的地方使用 __try{/* [__leave;] */} __finally{/* [AbnormalTermination] */} 即可。 SEH保证无论__try中的代码怎样退出(正常执行完毕、retrun、goto、异常等等)都能保证__finally中的代码被执行。1.在__try块之外的代码则没有这种特性。另外TerminateThread或者TerminateProcess则使程序没有机会执行__finally里的代码;2.如果__finally块中有return语句那么将不会执行其他return语句;3.因此应尽量少在__try块中放置return、goto等语句在__finally语句中同样如此;4.尽量使用__leave代替不可避免的return__leave不会增加系统开销;5.AbnormalTermination只用在__finally块中,如果是正常控制流进入__finally块那么此函数返回FALSE否则返回TRUE.我们已经看到结束处理程序在补救t r y块中的过早退出的执行方面很有效但也看到结束处理程序由于要阻止t r y块的过早退出而产生了我们不希望有的结果。更好的办法是在结束处理程序的t r y块中避免任何会引起过早退出的语句。实际上最好将r e t u r n、c o n t i n u e、b r e a k、g o t o等语句从结束处理程序的t r y块和f i n a l l y块中移出去放在结束处理程序的外面。这样做会使编译程序产生较小的代码因为不需要再捕捉t r y块中的过早退出也使编译程序产生更快的代码因为执行局部展开的指令也少。另外代码也更容易阅读和维护。 二.Exception Handlers and Software Exceptions __try{/* ... */} __except(filter){/* ... */}1.__except可以指定要过滤的条件也可以是一个过滤函数。过滤函数返回3个异常之一2.与__finally不同的是执行过__except块中的代码后将继续执行该块之后的代码3.注意在与__except块配对的__try块中嵌套__finally时的情形(先执行所有__except块对应的__try块里的__finally,然后最终执行__except);4.在__finally中写入return,可以阻止继续执行__except;5.如果过滤函数返回EXCEPTION_CONTINUE_EXECTION那么将不执行__except中的代码而是返回到出现异常的代码重新执行本条代码;6.如果fliter是EXCEPTION_CONTINUE_SEARCH那么本__except不处理该异常继续像上层查找。如果所有的__except都没有处理EXCEPTION_EXECUTE_HANDLER那么最终系统将调用UnhandledExceptionFilter用来显示未处理异常的对话框并让用户选择是否调试等等。如果用户选择了调试那么UnhandledExceptionFilter就运行调试器进程并附加本进程id作为参数调试开始了;7.fliter中可以通过GetExceptionCode获取异常的代码这很有用滴.PS:不能再过滤函数里调用此函数哦;8.可以通过调用GetExceptionInformation()能获取更详细的异常时信息比如寄存器等等同样也只能在filter中调用;9.通过调用RaiseException来触发一个软件异常。三.C异常和结构化异常 在VC中如果你使用了C的try、catch等等会自动被转化为SEH。例如throw被转化为RaiseException,而catch则是__except。转载于:https://www.cnblogs.com/yoran/archive/2008/03/04/1090379.html