![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как убить поток? [D5, Win95/98]
MegaVolt © (2006-04-17 11:06:00)Под Win98 у меня очень редко зависают потоки. Как можно их убить? TerminateThread не помогает.
Убить потоки сторонней прогой (PView95) тоже не получается.
Германн (2006-04-18 03:36:00) [21]
> Eraser © (17.04.06 21:32) [21]
>
>
> > MegaVolt © (17.04.06 20:38) [20]
>
> под 98 - не вкурсе.
> Да и про эту ОС можно уже забывать, imho.
>
Имхо, можно уже "начать забывать". Но учитывая МЕ. И учитывая, что все поголовно юзеры откажутся от этой линейки ещё очень не скоро!
Eraser (2006-04-17 21:32:00) [22]
> MegaVolt © (17.04.06 20:38) [20]
под 98 - не вкурсе.
Да и про эту ОС можно уже забывать, imho.
MegaVolt (2006-04-17 20:38:00) [23]>ещё как показывает, даже стек каждого можно посмотреть.
Ты уверен что это есть и под 98? Как смотреть количество потоков?
Eraser (2006-04-17 20:32:00) [24]
> MegaVolt ©
нет, дескриптор всё таки закрывается.
> Он точно так же как и мелкософтовский показывает наличие
> запущенного процесса количество потоков он не показывает
> :(
ещё как показывает, даже стек каждого можно посмотреть.
MegaVolt (2006-04-17 19:11:00) [25]Оказывается всё проще.
Вот что мелкомягкие пишут на эту тему:
Terminating a thread does not necessarily remove the thread object from the system. A thread object is deleted when the last thread handle is closed.
Т.е. в системе он останется но вроде как уже удалён. Правда всё равно exe-шник остаётся занят и его нельзя перезаписать :(
MegaVolt (2006-04-17 18:44:00) [26]>вот хороший "монитор".
Он точно так же как и мелкософтовский показывает наличие запущенного процесса количество потоков он не показывает :(
>код в студию
Код чего?
Цикла где потокам отправляется TerminatedThread()?
Rouse уже код смотрел у него глюков нет. Ни под 98 ни под ХР. У меня под ХР тоже пашет на ура под 98 есть проблемы на 2 машинах.
Я могу даже выложить работающий пример который у меня глючит но что с этого толку если он не воспроизводим вне моей сети.
Eraser (2006-04-17 17:53:00) [27]
> MegaVolt © (17.04.06 17:21) [15]
1. http://www.sysinternals.com/Utilities/ProcessExplorer.htmlвот хороший "монитор".
2. код в студию.
MegaVolt (2006-04-17 17:21:00) [28]>выкинь в мусор все эти "всевозможные мониторы", показывающие False
Т.е. монитор от самой мелкософт в мусорку? Т.е. винда сама признаётся что у неё зарегистрированы потоки а я этому должен неверить?
Сергей М. (2006-04-17 17:13:00) [29]
> пишет то она true а вот после этого всевозможные мониторы
> запущенных процессов показывают незавершенные потоки
Значит, если ты получил True, выкинь в мусор все эти "всевозможные мониторы", показывающие False.
> Максимум что я могу сделать это попросить её это сделать
> через TerminatedThread()
Да, разумеется.
Ты попросил - и система ответила TRUE ("готово").
В чем сомнение ?
> чем это должен заниматся поток чтобы его нельзя было остановить
> и убить?
Чем угодно.
Если у твоего процесса есть право на терминирование потока другого процесса, то тебя не должно волновать чем терминируемый поток занят в этот момент.
> раз остальная винда работает то всё же винда получает управление
Галиматья.
MegaVolt (2006-04-17 17:07:00) [30]>Не понимаю, в чем проблема ..
Проблема в том что пишет то она true а вот после этого всевозможные мониторы запущенных процессов показывают незавершенные потоки.
>то твои проблемы, а не проблемы ОС.
Странно до сих пор я считал что управление потоками это как раз дело ОС. Максимум что я могу сделать это попросить её это сделать через TerminatedThread()
И чем это должен заниматся поток чтобы его нельзя было остановить и убить? Ведь раз остальная винда работает то всё же винда получает управление.
Сергей М. (2006-04-17 16:46:00) [31]
> про то как убить поток
Этим заведует TerminateThread().
Если ф-ция вернула True - поток убит, иначе см. GetLastError(). Не понимаю, в чем проблема ..
> а не как правильно писать сетевые приложения
Причем здесь "сетевые приложения" - это тоже на твоей совести.
Есть некий блок.вызов некоей п/п.
Если тебе не удалось "висящий" на ней снять поток с выполнения, и при этом ты не понял почему - это твои проблемы, а не проблемы ОС.
MegaVolt (2006-04-17 16:33:00) [32]>Они тебе уже известны - использовать асинхр.версию ф-ции.
Изначально вопрос был про то как убить поток а не как правильно писать сетевые приложения.
Сергей М. (2006-04-17 16:12:00) [33]
> вывел "неправильный параметр"
Значит, неправильный и был передан.
> Это проверка на идиотизм или как?
> Если поток убивается нафига запускать ещё?
Это проверка на "или как".
Я понятия не имею о твоих программных действиях после того как ты принял решение терминировать поток и терминировал его.
> Есть какие либо идеи?
Они тебе уже известны - использовать асинхр.версию ф-ции.
MegaVolt (2006-04-17 15:44:00) [34]>Одна только констатация сомнительных "фактов".
>Это чисто умозрительное заключение.
Интересно с каких пор практические данные собранные в результате наблюдений становятся сомнительными и умозрительными?
>Потому что телодвижений твоих там не наблюдалось.
А советов куда двигать телом тама тоже не заметно было :( Собственно как и в этой теме.
>Это как ? Матом что ли ?
SysErrorMessage(GetLastError) вывел "неправильный параметр"
>Значит оные реально уничтожены.
Значит мелкософтовская утилитина которая идёт в поставке вижуал студио глючит и неправильно показывает количество запущенных потоков? Чем тогда смотреть количество запущенных потоков?
>Может быть после уничтожения этого потока ты еще туеву хучу таких потоков запускаешь
Это проверка на идиотизм или как? Если поток убивается нафига запускать ещё?
Есть какие либо идеи? Рекомендации что проверить или что то полезное что можно исспользовать? А то уже пол дня доказываю что я не дурак.
Сергей М. (2006-04-17 15:10:00) [35]
> там всё равно ничего кроме уточняющих вопросов нет
Потому что телодвижений твоих там не наблюдалось.
Одна только констатация сомнительных "фактов".
> я писал что ICQ клиент увеличивает вероятность
Глупости.
Ничего он не "увеличивает".
Это чисто умозрительное заключение.
> Из 6 повисших потоков 1 ругнулся на неправильный параметр.
Это как ? Матом что ли ?
> Остальные вернули операция выполнена успешно
Значит оные реально уничтожены.
> Тут в одной из тем меня старательно убеждали что после завершения
> программы винда освобождает все процессы и всю занятую память.
> Так что ничего страшного я не вижу
Все ж зависит от сквозной логики твоего приложения, каковая мне не ведома.
Может быть после уничтожения этого потока ты еще туеву хучу таких потоков запускаешь, еще задолго до ExitProcess()..
При этом шибко не удивляйся, когда ты получишь, к примеру, Out of memory.
MegaVolt (2006-04-17 14:52:00) [36]>Следовало бы ссылку на то обсуждение привести.
А смысл там всё равно ничего кроме уточняющих вопросов нет :(
>Помнится, ты там вроде бы на icq-клиента бочку катил ?
Если ты полностью читал ветку то там я писал что ICQ клиент увеличивает вероятность а не единственный виновник.
>А следовало бы в первую очередь это сделать.
Сделал посмотрел. Из 6 повисших потоков 1 ругнулся на неправильный параметр. Остальные вернули операция выполнена успешно.
>К тому же на основании чего ты уверен, что принудительное терминирование потока, "висящего" на gethostbyaddr(), не приведет к утечке памяти ?
Тут в одной из тем меня старательно убеждали что после завершения программы винда освобождает все процессы и всю занятую память. Так что ничего страшного я не вижу.
Сергей М. (2006-04-17 13:10:00) [37]К тому же на основании чего ты уверен, что принудительное терминирование потока, "висящего" на gethostbyaddr(), не приведет к утечке памяти ?
Сергей М. (2006-04-17 13:03:00) [38]
> ты в этом учавствовал
Следовало бы ссылку на то обсуждение привести.
Помнится, ты там вроде бы на icq-клиента бочку катил ?
> Функция gethostbyaddr
Используй асинхронную версию ф-ции, ничто этому не мешает.
Асинхронное исполнение вызова всегда можно корректно отменить.
> не смотрел
А следовало бы в первую очередьэто сделать.
MegaVolt (2006-04-17 12:51:00) [39]>Это какая ?
Это уже обсуждалось. И ты в этом учавствовал задав кучу уточняющих вопросов. Функция gethostbyaddr.
>Что говорит GetLastError() ?
Я это не смотрел. Сейчас проверю.
Сергей М. (2006-04-17 11:55:00) [40]
> Виснет апишная функция для работы с сетью
Это какая ?
> Может
Что говорит GetLastError() ?