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

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

...

吴毅挺:OpenStack是开源IaaS平台大势所趋的集大成者 做好扁平化设计-交互篇 狙击Google Glass?三星将推基于Tizen系统的Gear Glass GamePlay:跨平台开源3D游戏引擎,黑莓的努力你不懂 “少即是多” 高通QRD大会精华汇总 天云盾:构筑在云端的Web安全防护 解析大数据时代的数据库集群技术 莫里航海图,最早的大数据实践 弥补空缺!HappyFox面向iOS开发者发布开源移动HelpDesk SDK Chitika北美网络流量报告:WP KO黑莓、iOS超Android 《近匠》秦时明月:知名IP光环下的生存之道 微软研究院正式发布编程学习游戏Code Hunt 走近讲师:Memblaze刘爱贵讲述云计算中的闪存应用 【云先锋】ClouDil云方案:PB级大数据解决方案 一周消息树:这是要“发”啊?Google Brain之父正式加盟百度 最受欢迎的游戏引擎集结号:小白篇 多盟总设计师邢开捷:四两设计拨千金 Cocos2d-x游戏《Monster Strike》终结《智龙迷城》霸榜神话 高通物联网技术解决方案:从汽车到智慧城市 Arduino携手Atmel 发布Arduino Zero开发板 以色列玫瑰:细数十位科技创新领域的女性佼佼者 8款最佳的开源在线学习CMS系统 在发布站点前,Web开发者需要关注哪些技术细节? TOCC、中航信、高德、北斗平台重磅专家登场 邀您共享ITS技术盛宴 腾讯大数据之TDW计算引擎解析——Shuffle AMD APU14 BEIJING技术创新大会精彩看点 这是云整合时代开始的节奏吗?Rackspace考虑退出 一周热点:如何使用15美元每月的机器实现百万文档检索 黑客获取数据信息的目的和进攻手段及应对之策 Surface Pro 3遭大曝光:799$起、四色可选、12寸屏幕 当软件遇上设计,浅谈敏捷UX VS.精益UX 我的ASP。NET的应用程序的控件显示问题! 紧急求就`~ 哪里有delphi6,5等等自带的报表控件下载呢? 关于while 循环的问题! 问:网站后台怎么实现这样的管理? 我终于找到了可以赚钱的网战 字符型的id 三国群英传3怎么这么多bug呀!!玩一会,就不能玩了!!!怎么会事??? 哪位高手,请帮忙,我的硬盘不行了,有什么办法吗? 引导制约参数是什么? 菜鸟问题!请教数据输出格式! 如何做到在datagrid中对数据的修改不直接影响到数据库 Duwamish中一个看不懂的句子,请大家指教 如何让网页适应不同尺寸的显示器? 再问一个有关电脑上发传真的问题 DataGrid删除,对话框问题 怎么检查当前的XML文件是否服合相应的DTD标准? 问题代码,请指出 progressBar 怎么使用? 在linux下调试时,session出了问题!急!在线等待! 数据窗口里有一个子数据窗口,初始时,如何使子数据窗口选择某一行 线程传递消息有时出现乱码 如何随机生成6位密码,但不能有重复 如何在邮件的信头立加入自己喜欢的图片??谢谢 请问:为什么可以给一般对话框上的按钮添加位图,在CDialogBar上却不行?如何在CDialogBar上的按钮上显示位图?谢谢回复。 救命!在线等!再发。 怎末实现 统计图片的点击率??? 在线等待,解决即给分!!! 求助!连接数据库问题? VC.NET和VC6.0的语法差别大吗? 图像处理和计算机视觉方面有什么牛公司嘛? 高分求服务器c#向客户端javascript传递数据的各种不同方法!!! 用过C196开发196KC/KB的请进,谢谢 我用MFC编写了一个ActiveX控件,如何实现安全接口? 如何实现 XP 中目录窗口左边那种菜单 有关界面设计的两个问题? drawString时怎样规定一个区域,在这个区域内的文字显示,超出的不显示 急!在线等!Excel文件导入的问题。找不到可安装的ISAM 结识搞PHP的朋友 关于cell组件 郁闷当中,谁能给个用vb做DLL然后在DLL中增加数据库记录,在asp调用的例子。 singleton模式实现的问题 100分 谁讲一下定点数和浮点数的区别 急急急.请各位大虾帮帮忙啊! 請問語句的意思,謝謝 (Oracle8i)以SYSMAN登录控制台 斑竹9我! 求教高手!!!TEXTBOX与DATAGRID的问题 求助!关于用74LS181模拟8位机的资料!(散分啦,小弟急用啊!) 我的WINDOWS2003的DIRECTX 3D功能用不了,为什么? 如何用命令来修改设置计算机的ip,网关和dns等内容 不知道到那里问,借个人气了 托架的图标 二踢脚 直径求普通规格二踢脚直径 家门口不能种桑树?有这样的说法吗? Cu2O加热会有什么现象 树的年轮 二踢脚原理 Fe2(SO4)3怎么念?RT有硫酸亚铁吗 - - 世界上最轻的哺乳动物? 硝酸钾能烘干吗? 为什么在外面吃的凉皮都是黄色的,自己做是白色的?有网友说凉皮用摊煎饼的方式摊的?传统凉皮不是蒸的吗 世界上最大的哺乳动物是…?它大约有多重?说下我很想知道它有多重 雁门太守行中,黑云压城城欲摧,这句诗好在哪里? 为什么在海边捡的贝壳有些上面有像是人工打的小洞 最轻的哺乳动物是什么 “黑云压城城欲摧……”的整首诗是什么? 怎么在贝壳上面打小洞?在海边捡了很多贝壳,想做一串风铃,如何穿孔?就是不用到很复杂的设备,简单工具就能做到的,请指教, 确定物体位置的方法 4m ftth的上行速度是多少?求教ftth是光缆入户. 这些是什么,在海边捡到的(不像是贝壳,中间没有洞) 诗句补充 日出江花红胜火,下句? 对于FTTH光纤熔接机,使用者最在意的是什么性能,低损耗?小体积?价格?希望大家各抒己见. 在海边收集的贝壳怎么用绳子串起来(怎么在贝壳上开个小洞)? 我们可以用什么的方法确定某一物体的位置 _to the English-speaking environment helps..______to the English——speaking environment helps to improve your English much faster.A.Being exposed B.exposed 为什么选A.. 把四根长度为80厘米的纸条接成一个圈,连接部分的长度为5厘米,这个圈的长度为多少 日出江花红胜火全诗 ( )The best way to learn English is_____you____in an English-speaking environment.A.let;live B.to let;to live C.letting;living D.to let;live 银河战士零点任务得到波动武器后该做什么?黄色和绿色门如何开启 列举两个像诸葛亮那样忠心报国的文臣武将的名人,并写出他们留下来的名言或事迹! 高数,变上限函数中的x什么时候看做常量什么时候看做变量,什么时候可以提出积分号外 将N张长为a厘米的纸片,一张接一张的贴成一个长字条,每两张纸条重合部分的长度为b厘米(1)2张纸片贴在一起时总长为( )厘米(2)3张纸片贴在一起时总长为( )厘米(3)4张纸片贴在一 计算机中的-1,在16位机器上为什么是1000000000000001?而在32位机器上为32个1,这是怎么定义的呢?刚在CSDN上看到关于-1的上面说法, 哪位高手可以帮忙对函数costx/(λ^2+x^2 )进行x的(—∞,+∞)积分?谢过!(其中λ、t为常量) 心相印 VS 维达 哪个牌子好?突然间想起纸巾这个问题.估计女孩子在使用方面会相当有心得吧! 家用水泵生锈不转了,怎么办?有一段时间没有用水泵了,现在用只有“翁”的声音,水上不来 同样的物体摩擦能否起电 维达的纸真是不如心相印的好! 像诸葛亮这样忠心报国的文臣武将有哪些? 导体易导电的原因:导体内部有大量的( )金属导电靠的是( )酸碱盐水溶液导电靠的是( )绝缘体不导体易导电的原因:导体内部有大量的( )金属导电靠的是( )酸碱盐水溶液导电 风靡世界的靡什么意思 水在室温时,从液态变固态为什么是自发的呀? 请问金属导电的原理和绝缘体不导电的原理请问金属导电的原理(围绕“自由电子”来说);绝缘体不导电的原理 风靡的意思靡的读音,意思 好像在字典里没有风靡的靡的意思吧 女生提示数字32是什么意思?..互相喜欢! 春节期间燃放双响炮,如图所示,把双响炮用橡皮条系在一根竖直插在地里的竹竿上,悬在半空中,点燃后,双响炮“砰”一声竖直升上高空,“啪”一响而炸裂.关于双响炮第一响后竖直上升的运 刚刚看到一个新闻,说发现4000光年外的星球?按我的理解:光年是距离,光走一年的距离,世界上最快的速度就是光,那么发现了4000光年外的星球,光都要走4000年,我们怎么发现的?难道说4000年前就 文件名中有32这个数字代表什么意思为什么有些文件夹或者文件的名称带有32这个数字.比如:system32文件夹和regedit32.exe文件,什么是32位操作系统?(不知道是不是这样说)有16位和64位的吗?如果有 水里种蒜 Fe2(SO4)3固体是什么颜色? 身材32,18,数字单位是什么 大蒜为什么用水种 Fe2(SO4)3是什麼颜色? 什么自行车最轻 两者若为自由故,两者皆可抛.上两句是怎样? Fe2(SO4)3 中华儿女报效祖国名言 “若为自由故,两者皆可抛”的前一句是? 关于.磁铁能相斥多久.都知道磁铁同极相斥异极相吸,但同极能相斥多久.就是说如果把同极放到一块,是不是过一年或两年相斥力度就没那么大了.或都根本就没有相斥的力度了..问问老师们.在 三角形的面积是18平方理米,底边长是12厘米,高是多少? ‘‘若为自由故二者皆可抛’’是什么意思? 为什么磁铁相吸和相斥 年初提出申请年底建成入住 浙江努力破孙杨无证驾驶始末:曾自称有驾照 将被索契圣火雪原传递 小城居民驯鹿雪橇迎世界主要城市11月5日天气预报专访南非副部长:从中国发展看到非洲繁中信泰富在澳投资陷纠纷 或赔29亿元俄国防出口公司:俄近半武器出口均面向纽约地铁推出化妆品贩卖机 可据衣着推安倍2014年1月将访问非洲三国 意叙利亚中部城市发生自杀式炸弹袭击 致数万伊朗抗议者举行“占领美国使馆”集法国两名记者马里遇害 已有多名嫌疑人2013年11月4日外交部发言人洪磊外交部:巴基斯坦的主权和领土完整应当厦门远华“红楼”被辟为职工服务中心英一男子身着纳粹党卫军军装购物 自称安倍明年1月将访非洲三国 日媒称意在辩论失利令其信心受挫 新书披露奥巴马新华国际时评:克里七访中东难抚盟友传承文化 筑梦非洲——访非洲国际艺术采二幼钱新园区大班段举行水墨画展明星秀恩爱最正确的打开方式是什么?蔻驰 (COACH) 搭配日记(10渐变唇妆潮爆冬日街头!12月25日早间概念掘金微波炉开启美食之旅 五款产品强势来袭为什么又是快攻 12月末传说机械法天装修开工预付款是什么?什么时候交?交12月28-1月3间点亮灯笼免费赢5部落冲突八本打鱼分析 配置及杯段推荐冬季佳选 海信A8系列空调让你畅享舒多家P2P涉足资产证券化 规模已逾1净护全家 飞利浦空气净化器AC462方寸加点思路 封系装备打造西部航空推出“空中咖啡街”主题航班EAC(欧美中心)“全球天使圣诞城”17章团队副本沙王阵容推荐 血魔领衔宫本武藏出装解析 剑走偏锋非守既攻女大学生在外租房,半夜被歹人侵犯4股票账户除了炒股还能做这些,只有10粉丝的力量 火影忍者手游蓄力火影重燃他们在说什么?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘