Delphi安全结束线程

在开发过程中,不可避免的要用到多线程,而线程的同步、释放等又可能引入新的问题,不过网上已有许多资料,这里重点说下我使用的方法。

type
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  public
    constructor Create(...);
    destructor Destroy; override;
    //使用 reintroduce 关键字可以明确通知编译器屏蔽父类的同名方法而使用自己的方法。
    procedure Free; reintroduce;
  end;

constructor TMyThread.Create(...);
begin
  { 在这里创建相关对象,可以省去先挂起线程再恢复的操作 }
  inherited Create;
end;

destructor TMyThread.Destroy;
begin
  { 在这里释放相关资源 }
  inherited Destroy;
end;

procedure TMyThread.Execute;
begin
  FreeOnTerminate := True;
  while not Terminated do
  begin
    { 线程处理 }
    Sleep(100); //根据实际情况设置
  end;
end;

procedure TMyThread.Free;
begin
  //终止线程
  Terminate;
  //等待线程结束
  while not Finished do
    Sleep(1);
end;

这样一来,就可以像普通类一样使用Free来释放线程了,但是不能使用FreeAndNil进行释放。

当然,一定要调用Free才行。良好的编程习惯还是要有的!

转载于:https://my.oschina.net/u/209067/blog/3043629

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值