Особенности запуска потоков Dll в Windows, поток нельзя запустить при DLL_PROCESS_ATTACH |
Здравствуйте, гость ( Вход | Регистрация )
Особенности запуска потоков Dll в Windows, поток нельзя запустить при DLL_PROCESS_ATTACH |
Iron Bug |
24.6.2011, 8:59
Сообщение
#1
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Наступила на интересные грабли. Уже думала, у меня крыша едет. Оказалось, не у меня, а у венды
Предыстория задачи: была у меня консольная утилька, стало нужно переделать её в dll. Я решила просто перенести содержимое инициализации из main в DLL_PROCESS_ATTACH функции DllMain. В инициализации порождался дочерний поток, ожидался ответ от него и на этом инициализация, собственно, завершалась. И вот после переноса инициализации в DLL_PROCESS_ATTACH программа перестала работать. Причём очень странно: она не получала ответа от дочернего потока. Я перековыряла всё, перепроверила весь поток (а там у меня довольно навороченный поток был, с кучей всяческих темплейтов и библиотек буста). Перерыла всё, пока не поняла, что поток всё же запускается.... НО! Он запускаеся ПОСЛЕ выхода из обработки DLL_PROCESS_ATTACH. Вот так вот жосско. Выход, естественно, был сделан через дополнительную функцию инициализации в библиотеке, которая вызывалась уже после загрузки библиотеки через GetProcAddress. Так всё прекрасно работает. Что интересно, такая же схема в линюксе (когда поток порождается в инициализации __attribute__ ((constructor)) функции библиотеки) прекрасно работает. Вот такие грабельки. Век живи - век учись P.S. Нам надо нарыть смайлик: "грабли" Сообщение отредактировал Iron Bug - 24.6.2011, 11:43 |
|
|
Алексей1153 |
24.6.2011, 9:11
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
Текстовая версия | Сейчас: 21.12.2024, 19:51 |