![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Как можно отдать потоку команду на завершение из DllMain по сообщению DLL_THREAD_DETACH, если эту самую DllMain с этим сообщением вызывает сам поток и уже после выхода из основной процедуры? Что они имели ввиду? ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
тут просто сказано, что нет смысла пытаться что-либо синхронизировать в dllmain'е, т.к. сам вызов dllmain эксклюзивный, т.е. он блокирует любые одновременные попытки войти в dllmain, поэтому любой барьер тут приведет к дедлоку
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
nerdy_weirdie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 16.1.2007 Репутация: нет Всего: нет |
Это совершенно понятно. Меня интересует рецепт решения, который написан после двоеточия. Приведен фрагмент из статьи описывающей возможные проблемы при создании длл и пути их решения.
Это сообщение отредактировал(а) nerdy_weirdie - 11.10.2010, 10:46 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
после двоеточия описан рецепт выхода из ситуации, описанной перед двоеточием,
т.е. по завершении длл А (из какого-то потока), она пытается подождать завершения определенного потока T (очевидно вот таким вот макаром: WaitForSingleObject( T, INFINITE ) ), что естественно приводит к дедлоку вот они и пишут, что мол если нужно синхронизировать завершение потока T в dllmain, то какой-то конец этой синхронизации надо оставить за пределами dllmain: при выходе длл А, надо поднять событие для завершения потока T, поток T, среагировав на это событие, завершит свою основную работу (например какой-то цикл), и самым своим последним действием пошлет сигнал обратно в длл А, освободив ее от бесконечного ожидания, т.е. разрешив дедлок Добавлено @ 11:09 т.е. что-то вроде такого:
Это сообщение отредактировал(а) GremlinProg - 11.10.2010, 11:11 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |