Показать сообщение отдельно
  #4  
Старый 01.02.2016, 05:02
Loca Loca вне форума
Прохожий
 
Регистрация: 28.10.2015
Сообщения: 20
Версия Delphi: delphi 10
Репутация: 518
По умолчанию

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

Код:
  // ...

  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;

// ...

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

То, что нужно, всё получилось, спасибо за помощь
Ответить с цитированием