![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Stormeg |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 1.7.2009 Репутация: нет Всего: нет |
В DLL_PROCESS_ATTACH создаеться поток. На момент DLL_PROCESS_DETACH созданный поток уже не существует, некорректно завершен (убит) системой.
Как обойти данную ситуацию и самому позаботиться о завершении потока? Возможно как-то определить до события DLL_PROCESS_DETACH, что у системы есть намерения выгрузить данную DLL? DLL выгружаеться только в случае завершения программы. (Программа не знает о существовании DLL) (Похожая ситуация без решения) |
|||
|
||||
DrHex |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Система постарается(и у ней получится) убить поток, при выгрузки библиотеки, связано это с тем что поток может выполнять код в адресном пространстве процесса отведенного для этой библиотеки, да и в конце концов память потока(стек ну и че нибудь еще) хранится та в dll, а память надо освободить значит и прихлопним поток.
Можно вам посоветовать поставить хук на выгрузу библиотеки, но сново таки разве это решение проблемы? Разве что как временное.... А вообще в динамических библиотеках создавать поток, это не самое хорогое решение. Разве что если библиотека живет все время выполнения процесса. Хотелось бы узнать как происходит взаимодействие между библиотекой и процессом который использует библиотеку. --------------------
google.com и это все. |
|||
|
||||
Stormeg |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 1.7.2009 Репутация: нет Всего: нет |
DLL заставляет процесс вызывать пару API-функций через себя. Поток в DLL - синхронная прослушка именованного канал, на другой стороне которого висит управляющий работой DLL сторонний процесс. Как вариант локального решения проблемы можно попробовать изменить организацию общения с управляющим процессом, хм.. Убиение потока не приводит ни к чему критическому в работе программ. Но хочеться все сделать правильно. Это сообщение отредактировал(а) Stormeg - 2.7.2009, 01:34 |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
ага, и код хука будет то-же находится в dll ![]() Stormeg, можешь начинать думать о том, как переписать свой код так, что-бы поток не нужно было завершать, или переписать библиотеку так, что-бы у нее была ф-я a-la Finalize, но тогда программа должна будет знать о существовании dll ![]() |
|||
|
||||
DrHex |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
НУ и что? --------------------
google.com и это все. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
а ты уверен, что система сможет вызвать твой callback до того как поток завершится? ![]() |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 1 Всего: 32 |
DLL_THREAD_DETACH ?
|
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
так-как поток в этом случае завершается некорректно, DllMain c параметром DLL_THREAD_DETACH не вызывается
|
|||
|
||||
DrHex |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Вы забили как ставятся хуки(разумеется не виндовские)???? --------------------
google.com и это все. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |