Delphi Thread(3)

本文详细介绍了如何在Delphi中使用TThread进行多线程编程,强调了Execute方法中的线程执行逻辑以及Terminated属性的重要性。通过示例解释了如何避免长时间阻塞导致的程序关闭延迟,以及如何利用OnTerminate事件进行线程间通信。同时,文章提醒开发者注意线程释放的时机和同步问题,以确保程序的稳定运行。
摘要由CSDN通过智能技术生成

TThread 详解
        我们常有工作线程和主线程之分,工作线程负责作一些后台操作,比如接收邮件

                                                              主线程负责界面上的一些显示

工作线程的好处在某些时候是不言而喻的,你的主界面可以响应任何操作,而背后的线程却在默默地工作。

         VCL中,工作线程执行在Execute方法中,你必须从TThread继承一个类并覆盖Execute方法,在这个方法中,所有代码都是在另一个 线程中执行的,除此之外,你的线程类的其他方法都在主线程执行,包括构造方法,析构方法,Resume等,很多人常常忽略了这一点。

最简单的一个线程类如下

TMyThread = class(TThread)
protected
procedure Execute; override;
end;

在Execute中的代码,有一个技术要点,如果你的代码执行时间很短,像这样,Sleep(1000),那没有关系;如果是这样Sleep (10000),10秒,那么你就不能直接这样写了,须把这10秒拆分成10个1秒,然后判断Terminated属性,像下面这样:

procedure TMyThread.Execute;
var
   i: Integer;
begin
   for i := 0 to 9 do
      if not Terminated then
        Sleep(1000)
     else
        Break;
end;

这样写有什么好处呢

      想想你要关闭程序,在关闭的时候调用MyThread.Free,这个时候线程并没有马上结束,它调用WaitFor,等待 Execute执行完后才能释放。

       你的程序就必须等10秒以后才能关闭ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值