procedure TForm1.Button1Click(Sender: TObject);
begin
Test:=Ttest.Create(true);
Test.Resume; //запустить/возобновить
Test.FreeOnTerminate:=true; //освободить память после завершения
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Test.Suspend; //приостановить
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Test.Terminate; //остановить
end;
а память не освобождает после остановы
Поток и не должен освобождаться после останова.
Suspend использует системную функцию SuspendThread, которая просто не дает системе переключаться на обработку функции потока — своеобразная "заморозка"
FreeOnTerminate работает только если обработка функции потока завершена (это можно увидеть в classes.pas function ThreadProc(Thread: TThread): Integer;)
Метод Terminate не освобождает поток а меняет значение логического поля потока FTerminated, значение которого можно получить из свойства Terminated.
Это свойство должно проверяться в методе Execute потока, например так if not terminated then …
Если поток может быть "заморожен" по логике программы, обработка Button3Click должны быть изменена на
procedure TForm1.Button3Click(Sender: TObject);
begin
Test.Terminate; //остановить
if Test.Suspended then Test.Resume;
end;