Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Корректное завершение потоков DLL |
Автор: Stormeg 2.7.2009, 00:16 |
В DLL_PROCESS_ATTACH создаеться поток. На момент DLL_PROCESS_DETACH созданный поток уже не существует, некорректно завершен (убит) системой. Как обойти данную ситуацию и самому позаботиться о завершении потока? Возможно как-то определить до события DLL_PROCESS_DETACH, что у системы есть намерения выгрузить данную DLL? DLL выгружаеться только в случае завершения программы. (Программа не знает о существовании DLL) (http://forum.vingrad.ru/topic-177439.html) |
Автор: DrHex 2.7.2009, 01:02 |
Система постарается(и у ней получится) убить поток, при выгрузки библиотеки, связано это с тем что поток может выполнять код в адресном пространстве процесса отведенного для этой библиотеки, да и в конце концов память потока(стек ну и че нибудь еще) хранится та в dll, а память надо освободить значит и прихлопним поток. Можно вам посоветовать поставить хук на выгрузу библиотеки, но сново таки разве это решение проблемы? Разве что как временное.... А вообще в динамических библиотеках создавать поток, это не самое хорогое решение. Разве что если библиотека живет все время выполнения процесса. Хотелось бы узнать как происходит взаимодействие между библиотекой и процессом который использует библиотеку. |
Автор: Lazin 2.7.2009, 06:00 | ||
ага, и код хука будет то-же находится в dll ![]() Stormeg, можешь начинать думать о том, как переписать свой код так, что-бы поток не нужно было завершать, или переписать библиотеку так, что-бы у нее была ф-я a-la Finalize, но тогда программа должна будет знать о существовании dll ![]() |
Автор: DrHex 4.7.2009, 19:13 | ||
НУ и что? |
Автор: Lazin 4.7.2009, 20:02 |
а ты уверен, что система сможет вызвать твой callback до того как поток завершится? ![]() |
Автор: Riply 5.7.2009, 09:52 |
DLL_THREAD_DETACH ? |
Автор: Lazin 5.7.2009, 10:02 |
так-как поток в этом случае завершается некорректно, DllMain c параметром DLL_THREAD_DETACH не вызывается |
Автор: DrHex 5.7.2009, 17:41 | ||
Вы забили как ставятся хуки(разумеется не виндовские)???? |