如何在线程终止后自动执行FreeAndNill()

Ata*_*era 5 delphi

目前我正在使用额外的线程,以便在线程之后很好地释放内存.在你问之前.不,我不能使用FreeOnTerminate:= true因为我需要.waitfor.我还需要FreeAndNil(),因为只有这样我才能使用Assigned()检查线程是否正在运行.示例代码.

procedure TForm1.Button1Click(Sender: TObject);
begin  

  SupervisorThread:= TSupervisorThread.Create(True);
  SupervisorThread.FreeOnTerminate:=false; //MUST BE FALSE!
  SupervisorThread.Priority := tpNormal;
  SupervisorThread.Resume;

end;

procedure TSupervisorThread.Execute;
begin

  CleaningThread:= TCleaningThread.Create(True);
  CleaningThread.FreeOnTerminate:=true;
  CleaningThread.Priority := tpNormal;
  CleaningThread.Resume;

  //some loops here

end;

procedure TCleaningThread.Execute;
begin

  if Assigned(SupervisorThread)=true then
  begin
    SupervisorThread.WaitFor;
    FreeAndNil(SupervisorThread);
  end;

end;

procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin

  if Assigned(SupervisorThread)=false then CanClose:=true  
  else 
  begin
    CanClose:=false;
    ShowMessage('Cannot close form because SiupervisorThread is still working'); 
  end;

end;
Run Code Online (Sandbox Code Playgroud)