我的程序中有一个主线程和一个单独的线程。如果单独的线程在主线程之前完成,它应该自动释放自己。如果主线程首先完成,它应该释放单独的线程。
我知道 FreeOnTerminate,而且我读过你必须小心使用它。
我的问题是,下面的代码是否正确?
procedure TMyThread.Execute;
begin
... Do some processing
Synchronize(ThreadFinished);
if Terminated then exit;
FreeOnTerminate := true;
end;
procedure TMyThread.ThreadFinished;
begin
MainForm.MyThreadReady := true;
end;
procedure TMainForm.Create;
begin
MyThreadReady := false;
MyThread := TMyThread.Create(false);
end;
procedure TMainForm.Close;
begin
if not MyThreadReady then
begin
MyThread.Terminate;
MyThread.WaitFor;
MyThread.Free;
end;
end;