Попробуйте, например, так:
Код:
// ...
TMyThread = class(TThread)
private
protected
procedure Execute; override;
end;
// ...
var myThread: TMyThread = nil;
myThreadID: Cardinal = 0;
procedure TMyThread.Execute;
begin
// Код
// ...
// Бесконечный цикл, чтобы проверить, что поток действительно уничтожается
while True do
begin
Synchronize(
procedure
begin
// Код, который работает с VCL
Form1.Label1.Caption := 'Время: ' + TimeToStr(Time) +
' | Объектов: ' + IntToStr(Random(10000)) +
' | Поток: ' + IntToStr(myThreadID);
end
);
Sleep(1000);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if myThread <> nil then TerminateThread(myThread.Handle, 0);
inc(myThreadID);
myThread := TMyThread.Create(True);
myThread.FreeOnTerminate := True;
myThread.Priority := tpNormal;
myThread.Resume;
end;
// ...
Проследить за тем, что количество потоков не растёт, можно в диспетчере задач, выбрав "Вид - Выбрать столбцы..." и установив флажок напротив "Счетчик потоков".