Почему код в потоке выполняется дважды? - PullRequest
0 голосов
/ 29 мая 2019

Как указано в заголовке, почему следующий код выполняется дважды (2x Test в консоли) и как его исправить?

type
  TSelfThread = class(TThread)
    procedure Execute; override;
end;

procedure TSelfThread.Execute;
begin
  Writeln('Test');
end;

var
  SelfThread : TSelfThread;
begin
  try
    SelfThread := TSelfThread.Create(False);
  except
    on E: Exception do
      Writeln('Error');
  end;
end.

1 Ответ

2 голосов
/ 29 мая 2019

Единственным возможным объяснением этого поведения является ошибка в вашем коде, из-за которой вы не можете дождаться завершения потока, прежде чем завершить процесс.

Измените код, чтобы быть таким:

SelfThread := TSelfThread.Create(False);
SelfThread.WaitFor;
...