首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于结束线程的有关问题,FreeOnTerminate无效

2012-02-07 
关于结束线程的问题,FreeOnTerminate无效初学多线程编程,用TThread.主程序退出的时候,这些线程可以正常退

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

热点排行