读书人

关于结束线程的有关问题,FreeOnTermin

发布时间: 2012-02-07 17:45:36 作者: rapoo

关于结束线程的问题,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; 

读书人网 >.NET

热点推荐