如何在线程执行完之后,释放资源

iwillgo2 2003-08-15 12:09:38
如何在线程执行完之后,释放资源,我如何判断一个线程执行完毕?
...全文
247 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwillgo2 2003-08-18
  • 打赏
  • 举报
回复
to hiflower(花):
to zhoutian618(周天):

我这样测试线程是否被释放
procedure TF_Thread.Button2Click(Sender: TObject);
begin
if NewThread=nil then
caption:='nil'
else
caption:='no nil';
end;

但总是显示caption:='no nil';
是不是证明线程资源没有被释放
hiflower 2003-08-16
  • 打赏
  • 举报
回复
procedure TYourThread.Execute;
begin
//这里是你的代码
Terminate;//终止线程执行
Free;//释放自己
end;

也可以在主程序中释放线程资源

var YourThread:TYourThread;

procedure TForm1.FormCreate(..);
begin
...
YourThread.OnTerminate:=YourThreadTerminate;
...
end;
procedure TForm1.YourThreadTerminate(..);
begin
YourThread.Free;
end;

zhoutian618 2003-08-15
  • 打赏
  • 举报
回复
OnTerminate事件啊。
执行完成成后会调用的。
zhoutian618 2003-08-15
  • 打赏
  • 举报
回复
也可以写在ONT事件里面啊。

比如:
线程:=nil

procedure TP.OnT(Sender: TObject);
begin
线程:=nil
end;

//还要设置如下:
FreeOnTerminate:=True;


procedure TP.Execute;
begin
OnTerminate:=OnT;//!!!!!!!!!!!!!!!
FreeOnTerminate:=True;
//以下开始你的代码
end;

iwillgo2 2003-08-15
  • 打赏
  • 举报
回复
To zhoutian618(周天):
我不是这个意思,你说的是释放线程内部的资源,我的意思是,生成一个线程,等它执行完成之后,释放线程本身,也就是说 线程:=nil;
zhoutian618 2003-08-15
  • 打赏
  • 举报
回复
type
TP = class(TThread)
private
procedue OnT(Sender: TObject);
protected
procedue Execute; override;
end;

impl....

procedure TP.OnT(Sender: TObject);
begin
//释放资源
end;

procedure TP.Execute;
begin
OnTerminate:=OnT;//!!!!!!!!!!!!!!!
//以下开始你的代码
end;
hiflower 2003-08-15
  • 打赏
  • 举报
回复
同上

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧