Показать сообщение отдельно
  #3  
Старый 31.01.2016, 15:53
Delphinaut Delphinaut вне форума
Прохожий
 
Регистрация: 28.01.2016
Сообщения: 11
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Попробуйте, например, так:

Код:
  // ...

  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;

// ...

Проследить за тем, что количество потоков не растёт, можно в диспетчере задач, выбрав "Вид - Выбрать столбцы..." и установив флажок напротив "Счетчик потоков".
Ответить с цитированием