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

捕捉来自 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;

...

盘点最受开发者喜爱的Android 5.0 Lollipop API IoE Day侧记:想开发智能硬件?先要弄明白这几个问题 【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(二) 微软承诺所有Lumia WP8设备将升级至Win10,用户会买账吗? 周末,深圳微信开发者大会等您来!(参会必读+名单) 营造云安全生态链 第五届云安全联盟高峰论坛在京顺利召开 中国大数据六大技术变迁记 【最具价值CTO评选秀】当当网CTO熊长青:结合行业及技术发展,规划技术方向 社交颠覆传统,环信技术交流沙龙纪实(组图) 揭秘经典案例炼成之道 微信开发者大会精华回顾 从一家电子商务网站学到的经验教训 【最具价值CTO评选秀】极路由CTO康晓宁:极客转型CTO的感悟 盘点这些年来的“微信万能论” 《近匠》亲加通讯云:IM即时通讯API的极致服务者 TCL杯HTML5智能电视开发大赛完美落幕,8项获奖应用大揭晓! Xcode 6.2 Beta发布,支持WatchKit的iOS 8.2 SDK来了! 【最具价值CTO评选秀】携程高级技术副总裁叶亚明:从呼叫中心到移动互联网的演进 为什么靠谱的公司都应该参加CTO评选? 【深度剖析】微软开源.NET:战略重心已从PC转移到云端 专访POWER 8编程挑战赛选手黄文超:非科生的编程算法之路 BDTC 2014干货精彩不断,四大全天技术论坛议题全面曝光 全功能API!开源2D游戏引擎Firmament 微信公众平台新增“微信连Wi-Fi”功能,打通线上线下闭环 马化腾:微信在一线城市活跃 QQ增长从城市到农村 承包MIPS开发!Imagination发布双Codescape MIPS SDK 不任性了!Google Play宣布开通国内开发者通道 脑洞大开!用Swift写个Material Design组件库 美国最大婚恋网站eHarmony利用Hadoop、OpenStack重构自己 每个Java开发者都应该知道的5个JDK工具 异构计算应用研讨暨OpenCL编程培训在上海和西安成功举行! APIs.io:用来发布和发现API的利器 Delphi出现问题,请帮忙解决。 用java编程序,将String数据通过存储过程存入数据库,为什么有的时候cs.setString()好使无常呢? 求助:如何读出mshflexgrid栅格表头项的内容的宽度? 高分!! 问一个引号的问题,望高手们不要见笑 pb中怎样得到某个字符的asc码? 谢谢 ChangeDisplaySettings最低可以把分辨率和颜色设为多少呀? DataGrid+CheckBox的问题(查了很多例子就是解决不了) 再次提问,sql2000的问题? 请问在vbscript中怎样判断一个数,是否能被3整除 MSN Messenger5.0发送文件到MSN Messenger4.6,为什么总是连接不上? sql2000的问题,谁能知道? 100分:誰有thinking in java 2 的中文電子書和例子代碼,給我一份吧? 关于将图形放大缩小的问题. jsp后缀名大小写问题(急,在线等!) sourceforge主站上不去了,那还有比较大的sourceforge站点?最好是美国的。 如何取得一个程序的内存占用率,cpu使用率等信息呢? 如何解决MSN Messenger5.0不能发送文件给MSN Messenger4.6的问题? 怎样把时间放到数据库表里,格式需要转换吗? 文件操作,帮个忙吧? simple question 60 points wait for your picking 如何卸载rose 分虽小,结得快的啊!讨论一下…… option explicit是什么意思 大哥大姐们!看一下嘛!帮帮我! 又一次被奶牛拒掉,而且有了注册机。 simple question 60 points wait for your picking (菜鸟的问题)在EditBox中怎么换行? 超级难题 SQL如何写??? 如何让WinCE支持DVDROM 請問如何在ASP.NET中實現從客戶機上傳文件到服務器? 新手问:我声明api,但是参数里有我没有定义的类型,pb报错,怎么办 关于Tclientdataset中commandtext的问题 关于按扭的简单问题 调用ejb的错误,请帮忙看看,帮我顶顶也给分,谢谢 关于lei的配置问题 java中 ,换行为\r\n ,空格为什么呢???? 关于快速排序的问题?在线等待!!! 如何在网页上显示动态图表?(送100分) 高兴,散分,收集故事喽,多讲多得,不讲不得。请斑竹留情,不要删除。 一个文件上传的bean编译成功了,但不会使,哪位用过,请给出使用的源代码,或者其它能实现上传的也行,越简单越好并附说明的 我想在触发器中得到对当前表的SQL操作的内容,应该如何实现??v$sql视图中有相关的信息,如何提取?? 心情好好,散分,各位谈谈LINUX和UNIX的感受啊:) Can u help me? 在B/S下如何根据不同用户来相应的mail库 insert into 求解! 各位高手帮帮忙,关于存储过程的问题 请教:VFP6在表单1中,关闭表单1打开表单2。结果显示表单2后,表单1又显示了一下才关闭。怎样让表单1直接关闭呢?谢谢! 很简单的问题--可是我不懂如何用javascript实现弹出窗口(无菜单和工具条的) 请高手帮忙有关“邮件多播”的问题。 《Oracle Pro *C/C++设计》的下载 哪位有最简单的SERVLET的里子,包括添加,查询。。。 (1)下列说法正确的一项是( )A、“女”(nǚ)和“举”(jǔ)的韵母不相同.B、“ye yuan ji xi ying”都是整体认读音节.C、“西安(xi’an )、花儿(huar)、钥匙(yào shi)的注音是正确的.D、 struck啥意思? 感谢同学的作文 下列文学名著的点评正确吗?A 《格列佛游记》是一部杰出的讽刺小说,作者用虚构的情节和幻想手法揭露了当时英国统治阶级的腐败与罪恶.主人公热衷于航海,性格坚毅.他在小人国、大人过历 Struck By Lightning 歌词 keep distance with the beautiful girls 下面对文学名著的点评不正确的一项是( )下面对文学名著的点评不正确的一项是( )A.《繁星》《春水》是啊冰心在印度诗人泰戈尔《飞鸟集》的影响下写成,用她自己的话说,就是将一些 法国、德国、俄罗斯的最重要工业区、主要港口、主要河流分别是什么?是最重要的,其中之一就可以. I never advertent,accidentally fell in love with you,finally will keep your distance. 下列说法正确的一项是( )急!下列说法正确的一项是( )A.《稻草人》是叶圣陶先生写的第一篇童话作品.B.《稻草人》采用了总分总的结构方式.C.《稻草人》用倒叙的手法叙述了稻草人的 关于that和where,什么时候该用哪个?怎样判断是否强调和where引导的定语从句?或者什么什么恩……我想知道的比较多……这句话我判断不出是强调还是定从。It is a good place where we can prepare ourselv There are many tall trees _______ our classroom ,填什么啊 Every boy and every girl----(be)very clever为什么呢 农村人 三个字用英语怎么说 一路上遇到了不少同伴,这句话是病句吗?是,帮忙修改看看好不好? A boy and a girl catch a bird and - it in a birdcage.They like it very much and -- it every day. 下列说法中错误的一项是?下列说法中错误的一项是 A.《故乡》以“我”的所见所闻为线索,所以作品中的“我”并不是作者,而是小说虚构的人物.B.鲁讯《自嘲》诗中有“横眉冷对千夫指, 修改病句:我爱家乡一望无际的田野和诚实的农民. seemed to be deeply struck by his skill-you seemed to be deeply struck by his skill-Not exactly so.it was his courage___his skill that struck meA.more than B.as well as C.rather than D.less than我想问一下为什么不能选B呢?not exactly so不 love is not to be struck with fright 改病句、一望无际的田野上,麦苗绿油油的,像蓝色的海洋 be struck A global trade accord could still be struck within five to eight months 请问无锡哪里有英语角啊?我想锻炼口语 修改病句:我爱家乡一望无际的田野和真诚的农民修改病句:我爱家乡一望无际的田野和诚实的农民。不是真诚的能民 be struck with 请问无锡哪里有好的英语角 主要是锻炼口语 背英语笔记要怎么背?是像背英语课文一样背,还是像单词一样背? 埃及周围邻国及周边海洋有哪些? struck with 这个定语从句为什么用where而不用thatthe voice of china has set up a stage ____some people can achieve their dreams 埃及邻国有哪些? 无锡哪边有练习口语的英语角啊 定语从句中什么时候只能用where不能用that 下列说法中错误的一项选什么 无锡哪里有英语角啊?我想锻炼口语啊!城中公园里没有英语角啊 定语从句中有个题为什么选that 而不选where?you still remember the chicken farm _____ we visitied three month ago? 下列关于电脑使用的说法中错误的一项是()A.电脑要经常使用,不要长期闲置不用 B.为了延长电脑寿命,应避免频繁开机关机 C.用几个小时后应关机一会再用 六年级上册语文练习册第36页第二课时的一题怎么做啊 1.You must keep your a_______ with us.2.The old woman looked a______ because she couldn't find her purse.3.It must be something _____ outside.A.eat B.eats C.eating D.ate4.He is wearing a grey s______.1.appointment2.anxious3.C4.shirt 不会泰语,英语也不好,在曼谷找工作很难吗 下列哪一项说法是错误的A 古希腊和古罗马文明造就了西方文化之根B 在中世纪,欧洲的思想和文化教育基本上为基督教及其教会所垄断 C “我的附庸的附庸不是我的附庸”是指封臣和封君之 让我走进你的心,用英语翻译, 我在曼谷,我很想找一份工作,但是英语和泰语不是很好,请问我该怎么办 下列说法有错的一项是A《在山的那边》中的海是理想的境界,山是重重艰难险阻.B《走一步,再走一步》告诉我们:在人生道路上,不管面对怎样的艰难险阻,只要把大困难分解为小困难,一个一 为他们的英语翻译 我现在在曼谷,泰语不是很好,英语也不是很好,工作不好找,钱包也快缩水了,想去新加坡打工不知道怎么样可以过去,新加坡好找工作吗,签证好办吗,听说那边会很严的,请帮我出出主意. 下列说法错误的一项是( )A.《从百草园到三味书屋》通过对百草园和三味书屋的回忆,表现了作者儿童时代对自然的热爱、对知识的追求以及天真、幼稚、欢乐的性格.B.《爸爸的花儿落了》 There is a tree in front of the classroom 的意思加中文 清晨窗外传来清脆的鸟叫声改成拟人句是什么? 成都哪些地方有英语角?适合高中生的一般什么时候人比较多? I know how I can learn English well.(改为同义句) 清晨,白云常来做客,它们在窗外徘徊.(改成拟人句)错了,是改成比喻句 成都英语角的地点和准确时间想知道现在成都还有那些比较大点的英语角,具体的地点和时间,谢谢! 大洋州有哪些国家怕劳的面积,地图 阳光从窗外照进来.(改为拟人句) 英语翻译1.In a time of low academic achievement by children in the United States,many Americans are turning to Japan,a country of high academic achievement and economic success,for possible answers.2.If an entrepreneur was suddenly given as much “主管护师”一词用英文怎么说? 俄罗斯的主要河流流向 Struck by floods是什么意思 护士用的日常单词 英语就是例如打针啊,护理啊之类的,手术 啊就是护士日常用的单词,中英文对照,越多越好
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘