Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как проверить жив ли поток??? [D5, Win95/98, WinXP]


GanibalLector ©   (2004-08-27 13:02:00) 

Т.е.предположим имеется
TerminateThread(CommThread,0);// остановить поток
CloseHandle(CommThread);      // убийство потока

и вот как узнать,что теперь его нет ???
З.Ы. Я балуюсь с ThreadID та которая CommThread := CreateThread(nil,0,@potok,nil,0, ThreadID)
и проверяю ее на нуль.Если не нуль,то жив,если нуль то мертв.Естественно,приходится делать еще так:
TerminateThread(CommThread,0);// остановить поток
CloseHandle(CommThread);
ThreadID:=0;

но,ИМХО,существует куда более ПРАВИЛЬНЫЙ способ.Но вот какой???
Спасибо...


Ertong   (2004-08-31 02:30:00) [1]


> -если поток жив(неважно,пусть даже остановленный) то делать
> ТО-ТО
> -если мертв,то делать иное.

А почему-бы не создать для этого мютекс.


Digitman   (2004-08-29 12:00:00) [2]


> если поток жив(неважно,пусть даже остановленный)


.. и создал, например, очередь сообщений (Peekmessage, GetMessage), то ф-ция PostThreadMessage() вернет True - это один из вариантов проверки


GanibalLector   (2004-08-27 19:31:00) [3]

Digitman
у тебя задача какая ? "убить" тред ?

В проекте несколько форм.Так вот,в некоторых из них,есть условие:
-если поток жив(неважно,пусть даже остановленный) то делать ТО-ТО
-если мертв,то делать иное.

N170
Спасибо...ща посмотрю.


Digitman   (2004-08-27 15:08:00) [4]


> GanibalLector ©   (27.08.04 14:47) [3]
> естественно ! Ведь TerminateThread() - это функция.
> Ну и что с того???


у тебя задача какая ? "убить" тред ? Ну так и "убивай" его ! Но после "попытки убийства" проверяй ее результат ! он тебе как раз и подскажет, "убил" ли ты кого или стрелял из рогатки в небо


N170   (2004-08-27 15:02:00) [5]

поправка WaitForSingleObject(handle,0)


N170   (2004-08-27 15:00:00) [6]

как узнать,что теперь его нет

if ( WAIT_OBJECT_0 = WaitForSingleObject(handle) ) then .... {dead}


GanibalLector   (2004-08-27 14:50:00) [7]

УБИТЬпоток
закрыть дескрипторпотока


Согласен! От вольного комментарии писал...


GanibalLector   (2004-08-27 14:47:00) [8]

естественно ! Ведь TerminateThread() - это функция.
Ну и что с того???


Digitman   (2004-08-27 13:27:00) [9]


> TerminateThread(CommThread,0);// остановить поток
> CloseHandle(CommThread);      // убийство потока


TerminateThread(CommThread,0);// УБИТЬпоток
CloseHandle(CommThread);      // закрыть дескрипторпотока

!!


> существует куда более ПРАВИЛЬНЫЙ способ


естественно ! Ведь TerminateThread() - это функция.


Digitman   (2004-08-27 13:25:00) [10]


> и проверяю ее на нуль


с какого перепугу она "нуль" станет ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо