Сбой Boost Spirit при использовании в DLL - PullRequest
4 голосов
/ 20 ноября 2008

У меня сбой при использовании Boost.Spirit и Boost.Thread библиотеки в моем приложении. Это происходит только если я использовал Дух парсер во время жизни процесса из основного потока.

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

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

Любые решения / советы будут оценены.

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

  • Visual Studio 2005
  • BOOST_ALL_DYN_LINK
  • BOOST_SPIRIT_THREADSAFE

Ответы [ 2 ]

3 голосов
/ 20 ноября 2008

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

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

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

1 голос
/ 20 ноября 2008

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

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

...