Почему я получаю сообщение «Дескриптор недействителен» при ожидании потока, который я сказал завершить?

Как правильно остановить поток при закрытии приложения?

Я делаю следующее:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not Thread1.Finished
then
  begin
    Thread1.Terminate;
    Thread1.WaitFor();
  end;
end;

Но в Thread1.WaitFor у меня есть ошибка: «Ошибка потока: дескриптор недействителен ( 6) ". Если я использую WaitForSingleObject (Thread1.Handle, infinite) вместо WaitFor, все в порядке.

Почему, если я использую Thread.freeonterminate: = false, тогда WaitFor работает хорошо? Объясните пожалуйста, что я делаю не так. Насколько я понимаю, мне нужно использовать «if Assigned» вместо «if not Thread1.Finished», верно?

6
задан Jonathan Leffler 24 February 2014 в 00:38
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: