windows核心编程学习笔记(八)结构化异常处理(Structured Exception Handling)

首先要要知道,结构化异常处理(SEH)和C++提供的异常处理不相同。

一.Termination Handlers
Termination 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地唯一985,要去省会了!

源 | 软科(ID:zuihaodaxue)综合整理自福州市人民政府、各高校官网福州将迎来第三所985高校!11月22日,福州市长吴贤德会见厦门大学党委书记张荣一行并座谈,双方就进一步加强校地合作进行深入交流。会上&…

LeetCode 1411. 给 N x 3 网格图涂色的方案数(数学)

1. 题目 你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同)。 给你网格图的行数 n 。 请你返回给 …

元宇宙这么能赚?平均月薪近4万!

自2021年元宇宙元年之后,大批元宇宙相关岗位涌现在市场。近日,某网站发布《2022元宇宙行业人才发展报告》。2022年1-7月元宇宙相关招聘岗位同比增长16.6%,元宇宙相关岗位的平均招聘月薪18515元,深度学习岗平均月薪39971元&#xf…

sql两个时间之间的小时差_2年级学生每天上学路上有两个小时车程,该如何利用好这个时间?-知乎亲子热点快报/2020/09/04...

为了享受到更好的教育资源,许多家长会选择让孩子入读离家较远的学校,与此同时路上耗费的大量时间也让家长烦恼不已。既不想让孩子劳累过度,也不愿时间被白白浪费。你家孩子在上学路上常常会做些什么?你有什么好的建议呢&#xff1…

LeetCode 1379. 找出克隆二叉树中的相同节点(二叉树遍历)

1. 题目 给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 original 中的目标节点 target。 其中,克隆树 cloned 是原始树 original 的一个 副本 。 请找出在树 cloned 中,与 target 相同 的节点&#xff0…

Oracle定时器(Job)各时间段写法汇总

原作者:博客园一条辉 原文:链接 对于DBA来说,数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作。但是&#x…

websocket 带头部信息请求 header_关于websocket跨域的一个奇怪问题

最近在建设 websocket 长连接网关,过程中遇到一件比较奇怪的事情,做下简单的记录。需求十分的简单,websocket 网关在做权限校验的时候期望复用现有登录逻辑的 jwt-token。如下图所示,sso 与 websocket 网关属于不同的二级域名&…

Hinton 最新研究:神经网络的未来是前向-前向算法

文|李梅、黄楠编|陈彩娴源|AI科技评论在未来万亿参数网络只消耗几瓦特的新型硬件上,FF 是最优算法。过去十年,深度学习取得了惊人的胜利,用大量参数和数据做随机梯度下降的方法已经被证明是有效的。而梯度下…

LeetCode 355. 设计推特(哈希map+set)

1. 题目 设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能: postTweet(userId, tweetId): 创建一…

写出一段代码将链表中的两个节点位置互换位置_面试 leetcode 算法专题系列(二)—— 链表...

前言:只照着常考题去刷题确实是一种方法。但调研之后发现自己还是考虑不周,刷题刷的不应该是题,而是解题的思路和熟练程度。于是我决定重新组织一下刷题笔记的讲解顺序,不再以面试常考题来刷。而是以面试出题频率,方法…

感人至深的文章

http://bbs2.news.163.com/bbs/baoliao/75948727.html 转载于:https://www.cnblogs.com/shf/archive/2008/05/12/1192975.html

2022年度最佳开源软件榜单出炉!

源| OSC开源社区(ID:oschina2013)InfoWorld 公布了 2022 年最佳开源软件榜单。InfoWorld 是致力于引领 IT 决策者走在科技前沿的国际科技媒体品牌,每年 InfoWorld 都会根据软件对开源界的贡献,以及在业界的影响力评选出…

程序员面试金典 - 面试题 16.13. 平分正方形(数学)

1. 题目 给定两个正方形及一个二维平面。请找出将这两个正方形分割成两半的一条直线。 假设正方形顶边和底边与 x 轴平行。 每个正方形的数据square包含3个数值,正方形的左下顶点坐标[X,Y] [square[0],square[1]],以及正方形的边长square[2]。 所求直…

吵翻了!确认录取后导师和学生“互放鸽子”,网友:线上选拔太混乱

源 | 募格学术参考 | 中国科学报、科学网博客、知乎等导师和学生互相“放鸽子”是种怎样的体验?近日,《中国科学报》的一篇文章揭露了疫情下线上推免选拔的乱象。因为某些原因,产生了一些所谓“海王院校”(指在夏令营或预推免中&a…

监控和剖析数据库操作P6Spy,SQL Profiler,SQL 使用简介

新一篇: 关于java类的动态装载 几乎 80% - 85% 的数据库性能问题是由于应用数据库的设计或者应用程序本身的代码所引起的。因此良好的事务处理能力需要在设计应用程序的时候,在设计数据库的时候就考虑到性能和伸缩性。 ---- DB2 Magazine 在我们 Java 开发应用程序的…

python新手练习项目_适合Python 新手的5大练手项目,你练了么?

已经学习了一段时间的Python,如果你看过之前W3Cschool的文章,就知道是时候该进去【项目】阶段了。 但是在练手项目的选择上,还存在疑问?不知道要从哪种项目先下手? W3Cschool首先有两点建议: 最好不要写太应…

LeetCode 866. 回文素数(除11外,偶数位的回文数都不是质数)

1. 题目 求出大于或等于 N 的最小回文素数。 回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。 例如,2,3,5,7,11 以及 13 是素数。 回顾一下,…

首个在ImageNet上精度超过80%的二值神经网络BNext问世,-1与+1的五年辛路历程

源 | 机器之心两年前,当 MeliusNet 问世时,机器之心曾发表过一篇技术文章《第一次胜过 MobileNet 的二值神经网络,-1 与 1 的三年艰苦跋涉》,回顾了 BNN 的发展历程。彼时,依靠早期 BNN 工作 XNOR-Net 起家的 XNOR.AI…

中countif函数_countif与countifs:单条件与多条件计数适用场景

countif()的语法图丑~~图丑~~见谅~~Countif函数:对指定区域中符合指定条件的单元格计数。该函数的语法规则如下:countif(range,criteria)参数:range 要计算其中非空单元格数目的区域参数:criteria 以数字、表达式或文本形式定义的…

极大似然模型1

first_step.m%clear; syms rou fai2 k1 k2 k3 n rorn ii clc; ninput(观测时刻数 n); disp( dealing ); disp(Just wait for a few minutes............); k1sym((1-rou*rou)*(1-fai2*fai2)*Xmn(rorn,1)*Xmn(rorn,1)); k2sym((1-fai2^2)*(Xmn…