Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как правильно убить дочерний Thread ?


Автор: Гость_Игорь 20.6.2005, 22:10
Мне надо обработать следующую ситуацию:
аварийно закрыть приложение, когда
запущены дочернии потоки и эти потоки
не отвечают. Типа такого :

Код

procedure TMyThread.Execute;
begin
  while true do begin
    //do nothing...
  end;
end;

.

Я думал что при закрытии приложения ОС сама должна с
этими потоками как-то разобраться, но на самом деле приложение
подвисает - т.е. не может завершиться пока
есть дочерние активные потоки.

Как правильно обработать ситуацию? т.е., повторюсь,
мне надо не ждать нормального завершение потока,
а "убить" зависшие потоки. Как это правильно делают?

Заранее спасибо.

Автор: Girder 20.6.2005, 23:02
Код

procedure TMyThread.Execute;
begin
 while not Terminated do
//...

Автор: Poseidon 20.6.2005, 23:10
Цитата
мне надо не ждать нормального завершение потока,
а "убить" зависшие потоки.
Если нужно немедленно завершить поток, используй функцию TerminateThread.


Автор: Гость_Игорь 20.6.2005, 23:42
to Girder
в том то и дело что у меня код может
зациклится т.е. while true do

while not Terminated do мне не подходит

------

to Poseidon
пробовал, не помогает.
TerminateThread(MyThread.ThreadID, 0) возвращает false
а выполнение продолжается

Автор: Poseidon 20.6.2005, 23:50
Я так?
Код
TerminateThread(MyThread.ThreadID, 0):=True
Должно завершить поток немедленно (не тестировалось smile )

Автор: p0s0l 21.6.2005, 00:41
Цитата
TerminateThread(MyThread.ThreadID, 0)
Вместо ThreadID надо Handle...


Автор: Гость_Игорь 21.6.2005, 11:27
Точно!
Заработало.
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)