crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Особенности запуска потоков 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  


пжалуста )
Прикрепленный файл  grabli.bmp ( 4,46 килобайт ) Кол-во скачиваний: 697
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 10:55