Задать вопрос
@sitev_ru
sitev.ru - мой блог ...

Почему в DLL_PROCESS_DETACH некорректно отрабатывает WaitForSingleObject?

Пишу DLL.

Вызываю 1-ю функцию, внутри неё я создаю thread:

hThread = CreateThread(NULL, 0, MyThreadFunction, ...);


Хочу завершить thread, вызываю 2-ю функцию:

StopMyThread(hThread); //моя фукнция
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);


Всё отрабатывает корректно.

Теперь я хочу закрыть thread, если программа, которая использует dll, вызовет FreeLibrary. Для этого в dllmain обрабатываю DLL_PROCESS_DETACH. Пишу тот же код, что и для 2-ой функции, но зависает на WaitForSingleObject(hThread, INFINITE).

Почему так происходит?
  • Вопрос задан
  • 192 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@sitev_ru Автор вопроса
sitev.ru - мой блог ...
При вызове DLLMain вызывается системная критическая секция, которая так же используется в таких функциях как: WaitForSingleObject и других. Заменил WaitForSingleObject на самописную - всё заработало!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Из справки по DllMain:
Because DLL notifications are serialized, entry-point functions should not attempt to communicate with other threads or processes. Deadlocks may occur as a result.
Ответ написан
Комментировать
petermzg
@petermzg
Самый лучший программист
У вас тоже, что и тут
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы