关于结束线程的问题,FreeOnTerminate无效
初学多线程编程,用TThread.主程序退出的时候,这些线程可以正常退出,但是我想这些线程执行完毕就自动退出.
在debug的时候,只看到Thread start:Thread ID:xxxx.没有看到Thread Exit.
procedure TProcess.Execute;
var
i:integer;
begin
FreeOnTerminate :=true;
for i:=0 to 10 do
begin
if not Terminated then
checkDate();//执行函数
end;
form1.Memo1.Lines.Add('线程执行完毕!');//有正常输出执行完毕.
// Terminate;//添加Terminate也不行
end;
请问怎样才能,循环执行checkDate之后退出线程呢.
[解决办法]
没问题的阿,正确执行,如果不行的话,那就检查下checkDate的代码
- Delphi(Pascal) code
type TProcess = class(TThread) protected procedure Execute; override; procedure checkDate; public destructor Destroy; override; end;procedure TProcess.checkDate;begin Form1.Memo1.Lines.Add('checkDate');end;destructor TProcess.Destroy;begin inherited; Form1.Memo1.Lines.Add('Destroy');end;procedure TProcess.Execute;var i:integer;begin FreeOnTerminate :=true; for i:=0 to 10 do begin if not Terminated then checkDate();//执行函数 end;end;
[解决办法]
如果没有设置 FreeOnTerminate ,在调用线程的Free时候,vcl帮你做了会判断当前线程有没有结束,而不需要自己调用 Terminate; WaitFor; 看TThread的源代码:
- Delphi(Pascal) code
destructor TThread.Destroy;begin if not FFinished and not Suspended then begin Terminate; WaitFor; end; if FHandle <> 0 then CloseHandle(FHandle); inherited Destroy; RemoveThread;end;