(Возможное решение в конце этого Q.)
Динамическая загрузка библиотеки с именем X (на Windows 10 , последний VS компилятор) в основном тестовом приложении.
X библиотека открывает Windows именованное соединение по каналу с помощью Boost (1.71) .
Выгрузить библиотеку:
- После каждого деструктора ~ io_context , после вызова ~ winsock_init .
- Во время уборки последний зависает в cleanup (data _); , потому что есть один выдающийся_работ_ .
Это немного сложно сценарий, но я не могу воспроизвести его по-другому.
Моя проблема похожа на это:
https://asio-users.narkive.com/RmpqKB4g/problem-with-dll-causing-program-to-hang-upon-exit-when-io-service-contains-a-handler-to-async-read
По приведенной выше ссылке есть ответ:
«Да, возможно, вы не сможете передавать сообщения между потоками во время выгрузки».
Это моя следующая попытка…
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, что. У меня очень хорошая среда для отладки ... пожалуйста, не стесняйтесь спрашивать более подробную информацию.
(В случае не загруженной загрузки это не вызывает проблем.)
Примечания:
Почему в библиотеке load dyn столько сокетов? Winsock_init вызывался много раз, почему?
EDIT:
Изменение run () на poll () изменило сценарий, и мое тестовое приложение не зависло, но:
- Я не знаю разницы между run () и poll (). Чтобы быть более точным c, я не уверен, что знаю обо всех побочных эффектах (я не нашел подробного сравнения).
- Приложение вылетело при выгрузке библиотеки (FreeLibrary).