线程终止问题

zhengyanwml 2009-11-18 04:31:12
大家好!我用delphi开发了一个应用程序,利用了十几个线程。线程都是用的delphi封装的线程类,我都设置freeonterminate:=true了。现在想实现关闭窗体时等待所有线程运行完再把窗体关闭。该功能怎么实现?请大家帮忙。谢谢!
...全文
208 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Elvis_chen 2012-02-14
  • 打赏
  • 举报
回复
AList.Free; // 此处释放ObjectList,ObjectList会释放里面全部的线程
// 线程被Free的时候,会自动调用WaitFor
// 因此会自动等待全部线程执行完后才继续
系统在释放资源时会死机呀,不能这样处理吧。
Harryfin 2009-11-24
  • 打赏
  • 举报
回复
补上例子,楼主请自行按需要修改。

uses
contnrs;

var
AList: TObjectList;
AThread: TMyThread;
i: integer;
begin
AList := TObjectList.Create;
try
for i := 0 to 100 do
begin
AThread := TMyThread.Create(False);
ALIst.Add(AThread);
end;

AList.Free; // 此处释放ObjectList,ObjectList会释放里面全部的线程
// 线程被Free的时候,会自动调用WaitFor
// 因此会自动等待全部线程执行完后才继续
except
AList.Free;
raise;
end;
end;
iqyely 2009-11-24
  • 打赏
  • 举报
回复
学习下。。
Harryfin 2009-11-24
  • 打赏
  • 举报
回复
不用循环判断,都说了直接释放objectlist就完了
wintergoes 2009-11-24
  • 打赏
  • 举报
回复
freeonterminate设置为false

myThread.Terminate;
myThread.WaitFor;
zhengyanwml 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 harryfin 的回复:]
freeonterminate设置为false,创建的时候用一个TObjectList来记录这些线程,关窗体的时候直接释放ObjectList完事。原理:释放ObjectList -> 释放线程(线程释放的时候会堵塞到运行完了才释放)
[/Quote]我循环判断了
Harryfin 2009-11-19
  • 打赏
  • 举报
回复
线程FREE的时候会自动调用waitfor,可不手动调用
不得闲 2009-11-19
  • 打赏
  • 举报
回复
楼主可以写一个线程池来管理
lengfengxiaodao 2009-11-18
  • 打赏
  • 举报
回复
waitformultipleobject
VCL 线程类的waitfor 都可以
Harryfin 2009-11-18
  • 打赏
  • 举报
回复
补充下给楼主,TObjectList在Contnrs单元。
lhy 2009-11-18
  • 打赏
  • 举报
回复
循环判断terminate了吗?
Harryfin 2009-11-18
  • 打赏
  • 举报
回复
freeonterminate设置为false,创建的时候用一个TObjectList来记录这些线程,关窗体的时候直接释放ObjectList完事。原理:释放ObjectList -> 释放线程(线程释放的时候会堵塞到运行完了才释放)
wooden954 2009-11-18
  • 打赏
  • 举报
回复
TThread.WaitFor();//等待线程关闭
Seamour 2009-11-18
  • 打赏
  • 举报
回复
加个计数器,创建的时候+1,结束的时候-1,然后在 form 的 OnCloseQuery 里判断一下是不是0就可以了

5,388

社区成员

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

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