![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
Есть поток, который создает множество потоков и записывает их хендлы в список.
другой поток в цикле перебирает список и когда в списке есть хендл он пытается дождатся его завершения...Некоторые потоки(большинство) завершаются и обрабатываются нормально. Но некоторые остаются в "неопознаном" состоянии. В менеджере потоков в VisualStudio "висят" интересующие меня потоки. Но location у них странный,т.е. я не знаючто это значит: 0 0x0000146c Worker Thread TestThread _unlock_fhandle Normal 0 на этот момент в списке хендлы есть и WaitForSingleObject возвращает WAIT_TIMEOUT ну а если переключится на поток 0x0000146с - висит на выходе! с ф-ии _unlock_fhandle, т.е. на самой фигурной дужке.... Чем может быть вызвано такое поведение? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Так может потоки сами по себе завершаться не хотят? Каждый поток должен сам свою функцию потока завершить. Ждет их кто-то или нет- им по барабану.
-------------------- ... |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
хммм, вроде как должны выходить, но идея! буду смотреть в ту сторону. Просто смущает его текущая локация, еще и неизвесная)
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
не висит он там, он просто показывает позицию следующей команды в исходном коде (которой в общем-то всегда быть и не должно), в данном случае - на эпилоге функции посмотри стек вызовов(call stack), который привел этот поток к _unlock_fhandle, получишь команду, которая действительно не дает завершиться потоку, это или функция ожидания, или цикл какой-нить -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| ASMatic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
Earnest, я как бы и сам понимал, но в случае что все ветви работают по одному коду и по всех ветвлениях выводят логи совсем не подозревал что где то может быть маленькая и незаметная getchar(^), которую я еще когда не пользовал многопоточность поставил для теста ну и естественно она была именно там где раже всего бывает eip.
GremlinProg, да! Вы правы, это та команда которая будет следущая при получении управления потоком) Со стеком - первая мысль была такой, но студия показывала много чего : ntdll!0x..... kernel32!0x.... но вот о getchar() - ни байта. Поэтому решено было по совету Earnest пересмотреть код более тщательно и особо придать внимания циклам. Спасибо всем, задача решена! п.с. мож кто знает как в студию, для дебага подключить символы какой нить либы? |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |