Поток завершается автоматически, если его основной процесс принудительно завершен? - PullRequest
4 голосов
/ 04 декабря 2011

Мне нужно знать, если при работе с потоком (TThread) в Delphi 7 я принудительно завершу процесс, будет ли поток terminated или он будет продолжать работать?

Моя процедура выполнения выглядит следующим образом: если поток завершается, это останавливается.Но что, если поток никогда официально не прекращается?

procedure TJDApplicationThread.Execute;
var
  ST: Integer;
begin
  ST:= 5;
  fStop:= False;
  while (not Terminated) and (not fStop) do begin
    //----- BEGIN -----

    Synchronize(DoSync);

    //-----  END  -----
    //Sleep(1000 * ST);
  end;
end;

Ответы [ 3 ]

11 голосов
/ 04 декабря 2011

Поскольку в пользовательском режиме потоки не могут существовать без присоединенного к ним процесса, поток будет прерван автоматически.Однако может возникнуть задержка для полного завершения процесса, если этот поток делает что-то, что не может быть немедленно прервано (например, некоторые операции ввода-вывода)

4 голосов
/ 04 декабря 2011

Параметр Termination не приводит к автоматическому уничтожению потока.

Свойство Termination устанавливается из другого потока, чтобы сигнализировать рабочему потоку, что он должен завершиться.Затем рабочий поток должен подчиниться сигналу, проверив флаг Завершено в процедуре Execute.

После завершения процедуры Execute свойство Thread's Thread автоматически устанавливается.

Когдаосновной процесс убит, ваши темы будут прерваны и принудительно убиты.Если по завершению вы имеете в виду, достигнет ли он конца процедуры Execute, то нет.Он может остановиться прямо посередине.

В запросе на закрытие основной формы вежливо установить свойство Termination для потоков и дождаться, пока они "закончат".Вы можете просмотреть их и проверить.Но после хорошего тайм-аута вы можете отказаться и просто закрыть программу, которая прервет и уничтожит потоки.

2 голосов
/ 04 декабря 2011

«Завершение» может (должно) также использоваться в процессе сообщения о завершении работы Windows, если пользователь выключает компьютер и работает поток. Завершение должно вызываться в безопасной точке обработки вашего потока. Закрытие наборов данных и т. Д.

...