说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

捕捉来自 Thread 的异常-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
捕捉来自 Thread 的异常-Delphi资料

Thread 是我们进行应用和设计时不可缺少的利器,然而它却不是轻易就可以掌握的。作为一个不可视系统组件,它封装在 TThread 类中,由于一个子线程可以与主线程同时运行,因此,来自子 Thread 的异常在主程序里未必能捕捉到,这样,来自子线程的异常就会导致 Application 的错误甚至是崩溃,也可能造成主程序都结束了,某个Thread 还因等待同步对象的信号还在那儿自己运行着。

所以,对于有必要进行异常控制的 Thread 就必须进行异常处理,这个异常处理模块最好独立于主程序的异常处理模块。我们都知晓对通常异常的捕获都用一个 try..finally 块来处理,而对来自Thread的异常也不例外:

procedure TMyThread.Execute;

begin

try

// 在安全区应该做的工作

except

// 处理所有的异常

end;

end;

通常,这样的处理可以正常的工作,但却不是恰当的解决方法。我们希望不仅把异常信息传递给用户,而且要求在不影响 Thread 继续工作的前提下,由Application或系统单元(致命异常)来进一步处理异常。要做这样处理,首先,我们在自己的 Thread 类里定义一个异常对象,由这个对象承载各种要处理的异常类实例。其次,建立响应异常的同步事件。对 EAbort 消息加以抑制,对来自程序本身的异常由 Application 处理,对系统级异常,一般交与操作系统来完成。

以下是一个简单的异常捕捉应用框架。

unit Unit1;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs

StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

Procedure RunThread;

public

{ Public declarations }

end;

TBaseThread = class(TThread)

private

FException: Exception;

procedure DoHandleException;

protected

procedure Execute; override;

//父类函数为虚,在子类再重载其而处理具体事宜

procedure HandleException; virtual;

public

end;

TMyThread = class(TBaseThread)

private

...

protected

procedure Execute; override;

procedure HandleException; override;

...

public

...

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TBaseThread.DoHandleException;

begin

// 关闭当前主窗体对鼠标的响应

if GetCapture <> 0 then SendMessage(GetCapture

WM_CANCELMODE

0

0);

// 判断异常的范围并做相应处理

if FException is Exception then

Application.ShowException(FException)

else

SysUtils.ShowException(FException

nil);

...

end;

procedure TBaseThread.Execute;

begin

FException := nil;

try

...

//处理一些事情

except

//如果发生了异常

HandleException;

end;

end;

procedure TBaseThread.HandleException;

begin

//得到当前异常对象

FException := Exception(ExceptObject);

try

//避免因 EAbort 消息使程序推出

if not (FException is EAbort) then

Synchronize(DoHandleException);

finally

FException := nil;

end;

end;

procedure TMyThread.Execute;

begin

...

end;

procedure TMyThread.HandleException;

begin

...

end;

procedure TForm1.RunThread;

begin

//为 TMyThread 类创建实例

with TMyThread.Create(True) do

begin

FreeOnTerminate := True;

Resume;

end;

end;

...

Runscope联合创始人John Sheehan:API已死,API永存! IBM在京发布大数据白皮书 提出五项关键建议 Twitter开源Parquet 将支持Impala加速实时查询 使用Go代替Ruby,将服务器数量从30降到2 初创公司SwiftStack:“放在盒子里的S3” 赫尔辛基:全球移动游戏开发者的“黄埔军校” 不只属于三星!uMoove将发布“眼球追踪”SDK Android掌门人Andy Rubin宣布辞职 Chrome主管接任 openSUSE 12.3发布 弃MySQL拥抱MariaDB Meteor:让实时Web App成为主流 别了,Google Reader!谷歌于7月1日关闭服务 “天网”降临 机器人或将崛起? 涅槃重生:Qt 5 for Android预览版发布 Google Play将逐步移除广告拦截应用 Shapeways公司开放API 3D打印时代来临 37signal设计师眼中的iOS与Android系统 VMware/Oracle向公有云拓展生态系统 AWS“山寨”技术伙伴创意与产品,是自我完善还是杀鸡取卵? 苹果发布OS X 10.8.3 新版Boot Camp可支持Windows 8 恭喜!麻省理工两密码学教授获2012图灵奖 Rovio的逆袭,发布首款RPG游戏“克鲁德一家” 百会呼吁微软提供合法经营Office&#160;365的相关证明 谁说Vim不是IDE?(四) RDS升级:单DB实例最高可获得3TB存储和3万IOPS 移动周报:“先验证,后开发”的App开发必杀技 Supercell首席执行官谈公司运营理念 SwiftKey:Galaxy S4输入法背后的开发团队 前IE团队领导:IE是如何走向衰败的 谷歌更新BigQuery 允许在其中加入大型数据集 初创公司Spiral Genetics:超越现有DNA序列分析平台40倍速 六大开源监测工具 你用过哪个? 如何实现在JTABLE的列标题分成两行显示.如这种功能 AAA\nBBB 大家帮帮忙!!SQL的问题,我的sql为什么每到0点的时候自动恢复数据库,是哪种追加的方式,如何解决,特别急!! 小case 请问谁能为COM的非Interface数据写个创建,引用和释放规则的文章啊。。 文件的有关操作,请各位指教! 如何在程序运行时,对TABLE增加永久字段和计算字段 1个小问题,关于like与*(在线等待) 如何得到TIMAGE的BITMAP,PALLETE? 请问谁能为COM的CComXXX的原理和使用方法写篇文章啊。。 男人不如猫的十三条理由[转] 如何让浏览器(ie)弹出来就是最大化的? 如何用BCB进行TIMAGE的底层操作? 如何增加三层分布式系统的用户数? 请帮帮我~ 关于网络打印的问题?????????急急急 有windows1内有datawindow1有command1如何单击选择没有打开的datawindows2 VB,DELPHI 哪个对网络图形编程支持更好 有上海的公司需要人吗? VB,DELPHI 哪个对网络图形编程支持更好 调查:大家喜欢第三方控件吗? session 问题 如何在lotus中利用JAVA进行写代理,或哪里有较好的相关资料!如有好的帮助,定当另外再给分 虚拟现实,网络哪一个更有前途? 关于注册表 关于网络打印的问题?????????急急急 奇怪的现象。。 初学者问的基本的问题请大家指教 那里有编写ActiveX DLL网页的教程~ Unix或者Dos下怎么知道键盘有键被按下? 大家好 一个有意思的小任务,诚征实现程序 关于网络打印的问题?????????急急急 请问深圳IT行业人员薪资水平 请问谁知道那有关于售票系统方面的软件可以DOWN! windows2kserver 里的“本地策略”不能用? 我的2000因为WMI不能用了,谁能帮我,快!我在这等 灌水灌得差点忘了问问题~进来的有分。 一个有意思的小任务,诚征实现程序 我的2000因为WMI不能用了,谁能帮我,快!我在这等: 一个有意思的小任务,诚征实现程序 那位仁兄用过 installation system 请告诉我怎样设置才能使我的应用程序出现在“开始”菜单里 小弟急用 韩国队崛起大揭密:铁血作风 军人模式 地狱训练 vb中怎么动态生成按钮??? 请问:考中程怎样去复习,尤其是下午的题? java 的环境配置,请高手指教! 如何判断一个1024的int数组的所有元素的值全部小于50。寻求高速算法。 有谁看过Charles Petzold的《Programming Microsoft Windows with C# 》和Jeffrey Richter的《Applied Microsoft.NET Framework Programm 如何把图标加到 dll 文件中! 求助!!!哪儿能下载到VB高级编程的详细参考资料? 如何得到光标在编辑框中的位置?一个笨笨的问题 请教select函数用法!!!!! 三年级作文回报父母uyu 一本故事书两本科技书55元,两本故事书和一本科技书38元,一本故事书和科技书各多少元要列算式,请不要用方程式,谢谢! 萌芽网的新概念作文大赛的投稿地址以及邮政编码我听说萌芽要举行新概念作文大赛,谁有大赛的投稿地址与邮政编码, 广州英语夏令营 用笑靥如花 造句三个句子 衣服上弄上了中性笔油怎么样能洗掉?如 题 . ! 暑假英语夏令营 首选广州东方英文书院都说广州东方英文书院的夏令营做得不错,很有口碑,质量有保障, 用当……时造句 要求:写一个排比句 写四个句子 经史子集具体指什么 带有量字的四字词语有哪些 用好像,和显得格外造句.用像和那么造句,用简直像似的造句造三个句 经史子集的区别在哪里 含有所字的四字词语 高中800字演讲稿需要一篇3分钟的演讲稿,800字左右,不要小学国旗下讲话的那种,不要语言赘饰的,最好是有实际内容的. 什么是“经史子集”﹖ 求运动会班级入场解说词 演讲稿 800字随便什么主题都行. 经史子集包括哪些 乐宁的教学怎么样? 可爱的小白兔作文 经史子集是指?希望再详细一点! 乐宁教学如何?家里有小孩子想学英语,朋友介绍乐宁,想了解下情况 介绍小白兔的作文400字以上 小白兔的作文400字左右 有人知道乐宁少儿英语如何嘛? 参加新概念作文大赛时表格上的字数究竟如何计算?必须用打格的稿纸吗? 观察小白兔的作文. 一件工程,甲独完成需20小时完成,甲、乙合作需要12小时完成,先由甲独做5小时后,乙再参与进甲,问还需多少时间完成?快要方程 写小白兔的优秀作文 咧字的形近字及组词有哪些呢? 写一篇关于郊游的英语日记写一篇80词左右的日记,记录3月1号(星期六)你和王明的郊游.内容包括:天气 出发地点 交通方式 郊游过程及个人感受. 萌芽新概念作文参赛投稿的稿纸用哪种?用什么颜色的看起来笔好些吖,投稿的稿纸用哪种内?方格的还是横格哒、 我喜欢横格因为它看起来比较干净吧、但是又有人说看起来潦草介意用方格的 形近字,组词 用三个有时造句加油、、、 萌芽新概念作文要用什么样的稿纸投稿好些, 令我感动的一件事500字 关于同学之间的 用三个也许造句? 怎样参加新概念作文大赛?越具体越好 最好有报名时间等等...这个是不是每年都有?..报名时间是? 令我感动的一件事 500字(最好能用上纸巾) 三个有时造句急 假如你将代表你校2014届毕业典礼上发言,请你用英语写一篇发言稿,内容如下:回顾 每丽的校园假如你将代表你校2014届毕业典礼上发言,请你用英语写一篇发言稿,内容如下:回顾 每丽的校园 令人难忘什么作文600乐于助人 用三个词句造句运用(溪流、大海、生命)这三个词语按要求组成一段话,(1)描绘自然景物.(2)表达对人生的感悟.搞错了,是按要求写两段 假设你在学校举行的英语演讲塞中获得了好成绩,将在颁奖仪式上发言.请用英语写一篇发言稿.急.要英语.80字左右. 作文600字《这就是我一个乐于助人的女孩》 乐于助人的作文——1000字! 一项工程,甲、乙两队合作要12小时完成,甲单独做要20小时,乙单独要几小时做完? 假如你将代表你校2008届毕业生在学校毕业典礼上发言,请你用英语写一篇发言稿,发言稿的内容要点如下.回假如你将代表你校2011届毕业生在学校毕业典礼上发言,请你用英语写一篇发言稿,发言 乐于助人的我 作文 200字 要有景物,语言,修辞,神态,心理,动作描写.结尾一议论抒情为结尾 用三个有造句 给下面的字找个形近字,再分别组词,相信你最棒!秧()_() 广州市最好的英语夏令营是哪里 99杯新概念作文大赛交手稿还是复印稿?特快专递可否? 小白兔作文 回报父母的爱作文 新概念作文可以重复交稿吗?今年的新概念作文大赛,11月20日截止.但是规则上面没有说得很详细.我想问下,如果已经交了一篇参赛文章了,还可以再以同样的名字寄另外一篇去吗? 萌芽新概念作文参赛可以多投稿么?当然,所有的稿都是我的名字,我也会用好几个表格的, 但是多投稿了会不会被评委排斥吖, 会不会印象分大打折扣, 他想:诶这个人好烦呐,会不会^_^嘿嘿、对 广州市最好的英语夏令营.我想给孩子参加英语夏令营,提高英语水平,因为他对英语不感兴趣,广州有很多家,不知哪家最好? 新概念作文大赛稿件我是参加第十六届新概念作文大赛的.我的一篇小说7000多字,上面说是5000字以内,马上就截止了,是寄原稿去还是复印件或者是打印件? 《萌芽》下半期(新概念作文)如何投稿不是参赛,是纯粹的投稿
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘