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

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

...

程序员的野心:让GPU像CPU一样运行 Gungho热潮正在逐渐消退? Thalmic创始人专访:穿戴式体感设备MYO背后的开发故事 移动周报:GSMA各种神器,Qt 5.1,Android 4.3,本周惊喜多多! 奇虎360Web平台部基础架构团队访谈:开源线上数据库中间件Atlas 化繁为简:UC优视发布“UC+”开放平台战略 从40亿美元到10亿美元 Hulu的美梦是否又一次成为泡影? 百度开发者俱乐部第六期:BAE3.0开放内测 云编程马拉松启动 微软宣布将于今年9月30日正式关闭MSN TV服务 程序员不应该再犯的五大编程错误 中国开源事业,路在何方? StackOverflow上的编程趋势 Oracle悄然将Berkeley DB许可证更改为AGPL 简单易用,保护隐私:麻省理工的邮件数据挖掘分析工具Immersion Microsoft Ventures进入中国,为云生态系统构建提供加速度! 这是场战争:盘点那些参与智能手表竞争的厂商 三星豪掷80万美元奖金 第二届全球开发者挑战赛开幕 MongoDB Map Reduce速度提升20倍的优化宝典 腾讯云总经理陈磊:可信任云服务背后的技术支撑力 “叫好不叫座”的石墨烯也许会给我们带来更清凉、更长寿的计算机 微软WPC 2013:Windows 8.1将于8月底提供给OEM合作伙伴 TIOBE 2013年7月编程语言排行榜:PHP强势回归 扁平化设计或成下一个流行趋势吗? 永生、登天、出唱片、开托儿所,IT大佬业余还玩什么? 终于盼来了:苹果iOS7 Beta 3、Xcode5预览版 可堆叠的创意 开源硬件Microduino开发团队专访 致任天堂的公开信:我想在iPhone上玩超级玛丽 为什么OpenStack被视为新的Linux? Netflix开源Pig可视化框架:Lipstick Tangle:一个开源的数据交互式JS库 云储存服务Dropbox用户达1.75亿 旨在同步而非保存 上次的文章到那儿去了? enmity,进来,我给你结帐 enmity,进来,我给你结帐!! 各位侠客帮忙啊,重新装系统出了问题! 将10进制转换成16进制的函数是什么啊? VC高手,怎样以编程的方法实现磁带机的Backup 和 Restore. enmity,进来,我给你结帐.共200分 支援白菜300分,支持白菜个人网站建设:))) CMM 的缩写是什么? 想和大家讨论一下怎样系统的编制软件 如何实现和Word、CorelDRAW同样效果缩放位图 请问各位大哥大爷大妈大。。。。。。。。。。。。。哪里有支持 ASP 的服务器软件下载 我该如何控制IP地址??高手请进。。。 弱弱地问:关于SQL server中的中括号。 各位侠客帮忙啊,重新装系统出了问题!! 一点点小问题????? 请问在 WINDOWS98 下面,除了IIS,还有没有支持 PHP 的服务器软件呢? 在ADO中如何获取表名 关于ASN树的问题(snmp中的MIB的拓扑树) 你是高手你进来!!!!! 各位的顶级域名都在哪申请?价格/速度如何?大家都来说说! DirectX8的MultiFileReader过滤器怎么找不到? 关于用VB显示ado数据库中的图像字段问题 大家来谈谈Msdn如何有效利用 请各位帮忙查看我这段程序错在哪里 , 我是照书上做的 , 可就是无法保存. SQL plus 为何无法登录?? 谁要下载msdn? 紧急求救!寻找工作! 最新新消息~~~~~~~台灣地區中午地震最大震度花蓮市5級 有没有大连的公司要俺? 请教大家!!!java如何实现多重继承?接口该如何使用?份数可以再加,只要我明白了 怎样以编程的方法实现磁带机的Backup. 愿者请进,请各位留下自己的QQ或E-mail,以后大家可以多多交流!!! solaris unix8 的一个问题 asp是用什么软件的阿?我用了interdev,可是开始新建项目时就不行,叫你输入serve时,总是不对?应该输什么啊? 关于字符集 哪里有好的LAN管理软件??? 一个去美国的机会,保签(替朋友贴的,信誉没问题) 打印没有输出? 动态分配内存 因为本人准备过一段时间出去找软件开发工作,本人手头有一张高级程序员资格证书,但没有本科学历请问?? delphi6.0中 data access中怎么没有ttable 和tquery部件了, 该怎么办? 在w2k 下多用户的自动登录。。请指教? SubclassWindow的问题,急,多谢!!!! 高分求购高程经验 一个留学美国的机会,保签 本人手头只有一张高级程序员资格证书,但没有本科学历请问?? 请问如何制作多表头报表,有什么好的VCL吗? 关于水货手机的问题 Is there very large defferent between VB and delphi? Wise INSTALL 安装 DELPHI 出现了问题? 天气冷了,你要盖好被子,不用依靠谁的体温 英文翻译 盘面里的黄金分割线怎么看滴……0.618 0.5 0.382 都有说法吗? 饮水机上的水,热水温度最高能达到多少度?另外喝自来水加热过的水好还是喝饮水机上的热水好? 补充句子,天气越来越冷,湖面上结了厚厚的冰,天越来越( ),( )人越来越( ),( )天越来越冷,湖面结了冰,天越来越( ( 天越来越( )( 天越来越( ( ) 1.618黄金分割黄金分割 饮水机桶中的水会不会和烧开的热水混合?如果把自来水灌进桶里,当做饮用水好不好? 人体在一天中什么时候体温最高,什么时候体温最低?它的变化趋势是怎样的? 黄金分割比例是0.618,这句话对吗要注意各种细节哦~ 饮水机的水是烧开的吗?有没有到100度?我想用自来水放到桶里来用不知行不行. 人体在一天中体温怎么变化在一天中,正常体温范围上午大概是多少,中午是多少,下午,晚上又是多少 黄金分割比是什么 我们家自来水烧开后特别难喝,现在每天喝饮水机过滤的水,长期喝有好处还是坏处阿?饮水机过滤的东西是碳粒我家水壶是不锈钢的,很干净的!没有水垢,自来水里应该不含碱(烧开的水没碱,没 什么是黄金分割率? 黄金分割里较短线段与线段的比值= =就这样..不要小数带根号谢谢...是较短线段与线段的比值注意~较短线段较短线段较短线段较短线段..... 现在那些饮水机的水被反复反复的烧开,喝了这对身体有什么影响?据说烧开5分钟还是10分钟之后的水就不宜喝的了具休是几分钟啊?忘记了 什么是黄金分割比例?教我分 生活中的黄金分割的实例,差不多要3个,具体一点~~~ 饮水机是过滤的,现在不想用过滤桶,能用桶装水吗 黄金分割的比例率是多少? 黄金分割有什么生活实际应用实例?我们今天学了黄金分割,但不知道究竟有什么用途`` 过滤饮水机用自来水过滤可以吗不要复制``我想买一个过滤饮水机``就是桶上有过滤东西的`自来水直接倒进去能喝吗? 黄金分割率 生活中的黄金分割比,快一点,一定要写出比. 请问饮水机是买桶装水的好还是自来水过滤的好? 黄金分割的比例是多少?是1比多少啊? 能举例告诉我黄金分割广泛应用于生活用品的例子吗 美的的饮水机过滤器过滤之后水里有自来水味道? 黄金分割比例是什么的拉速度快解放;阿生的纠纷了爱上的话卡都是法律框架爱上对方空间哈斯地方爱的身份和 【】“黄金分割”在生活中的例子?【】如题 美的饮水机过滤后的水直接饮用还有自来水的味道,能直接喝吗?新买的美的饮水机,带陶瓷加活性碳过滤的,过滤后的水还是有自来水的味道,可以直接饮用吗? 黄金分割比例 我们喝什么水健康烧开的自来水致癌 婴幼儿喝桶装水好,还是自来水好? 世界上有什么建筑具有黄金比例和黄金分割的. 水二次烧开喝,对身体健康有影响吗?二次烧开的水是什么味道?蒸馏水一样的无味吗? 城市居民一般喝什么水,烧开的自来水,还是桶装水,还是买的矿泉水 人的体温是由“下丘脑”中特殊的神经细胞控制的,他对人体的体温的变化很敏感.脑温度高于37度时,人体散热机制(如血管舒张、出汗等)就还活跃起来.已知37度时蒸发18g汗水所需能量是4320j 黄金比例和黄金分割有什么区别? 如何饮水更健康? 专家:自来水烧开喝安全 下列关于人体在寒冷环境中维持体温恒定的叙述中,正确的是( )A.寒冷时,酶活性自然增强,因而代谢加快,产热增加B.寒冷时,肾上腺素分泌减少,代谢降低C.寒冷时,人体产热多,散热少,以维持 黄金分割与黄金比例分割有何区别 自来水烧开就是安全的饮用水吗? 当人体处于寒冷环境时,保持体温恒定的方式A.增加产热,散热不变B.增加散热,产热不变C.增加产热,减少散热D.增加产热,增加散热 黄金比例的标准是什么?什么是黄金分割点?古代选美女的标准好像就是依照黄金比例的吧,这个比例是什么? 饮水机的水反复烧开能喝吗? 为什么人体的温度是37度,室外的温度39度左右,人会感觉到那么热哎?比如说你去接触一个38度的东西,你却不是好热,但是为什么天气才39度就会决的很人勒? 有没有关于黄金分割线(黄金比例)详细的介绍?如:黄金分割线的来历、应用范围等等. 自来水安全吗?烧开就可以喝了吗? 当人的体温是37度时,华氏温度是多少 黄金分割是比例中项吗? 饮水机一般把水烧到几度? 胳膊天气越热反而越冷怎么回事好像是月子病 但不是很清楚若有怎样治疗的话那就更好了 为什么只有黄金分割比例 饮水机里面的水一定需要烧开了才能喝吗? 为什么天气越热 井水越冷 黄金分割定律1.618还是0.618如题... 饮水机喝的水是用自来水烧的,红的一边是开水,蓝的一边接的水可以喝吗?拜托了各位 谢谢 为什么天气越来越冷,又越来越热 股市中黄金分割数据中出现了0.382 、0.5 、0.618 和1.382 、1.5、1.618这两组数据?应怎样区分 饮水机放自来水饮用对身体有害吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn