Ускоряет сбой Spirit при использовании в библиотеках DLL

StackOverflow https://stackoverflow.com/questions/304850

Вопрос

Я испытываю сбой при использовании Boost.Spirit и Boost.Thread Библиотеки в моем приложении.Это происходит только в том случае, если я использовал Spirit анализатор в течение всего срока службы процесса из основного потока.

Сбой происходит при завершении и, по-видимому, связан с очисткой хранилища для конкретного потока, выделенного анализатором Spirit.Вероятно, сбой происходит из-за последовательности, в которой загружаются библиотеки DLL поскольку память, специфичная для потока, выделяется внутри библиотеки DLL которая уже была выгружена.The Boost.Однако Thread DLL не выгружается до тех пор, пока само приложение не завершит работу.

Есть ли у меня способ заставить Spirit очистить свой конкретный поток хранилище, напримерв моей dll-main, когда я получаю уведомление об отключении процесса?

Любые решения / подсказки были бы оценены.

PS!Моя платформа и настройки:

  • Visual Studio 2005
  • BOOST_ALL_DYN_LINK УСКОРИТЕЛЬ_ALL_DYN_LINK
  • BOOST_SPIRIT_ ПОТОКОБЕЗОПАСНЫЙ
Это было полезно?

Решение

Что ж, я нашел обходной путь.

Везде, где я использую вызов boost::spirit::parse , я в основном создаю workerthread для его запуска, в то время как вызывающий поток блокирует вызов join с workerthread .Не идеально, но, похоже, пока что это работает без каких-либо побочных эффектов.

Все еще интересуюсь любыми альтернативами, поскольку нутром чую, что отдельный поток на самом деле не нужен.

Другие советы

Boost.Spirit доступен только для заголовка, т. е.он не находится в своей собственной библиотеке dll, так что, возможно, это не порядок выгрузки библиотек dll, а скорее другая проблема.

Убедитесь, что экземпляр, содержащий ваш анализатор spirit, удален и не оставляет висячих указателей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top