![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как проверить жив ли поток??? [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]
> и проверяю ее на нуль
с какого перепугу она "нуль" станет ?