4

我在我的应用程序中使用 Boost.Spirit 和 Boost.Thread 库时遇到了崩溃。仅当我在主线程的进程生命周期内使用 Spirit 解析器时才会发生这种情况。

崩溃发生在退出时,似乎与 Spirit 解析器分配的线程特定存储的清理有关。它可能由于卸载 DLL 的顺序而崩溃,因为线程特定的内存是在已经卸载的 DLL 内分配的。然而,在应用程序本身退出之前,Boost.Thread DLL 不会被卸载。

有没有办法让我强制 Spirit 清除其线程特定的存储,例如当我收到进程分离通知时在我的 dll-main 中?

任何解决方案/提示将不胜感激。

PS!我的平台和设置:

  • 视觉工作室 2005
  • BOOST_ALL_DYN_LINK
  • BOOST_SPIRIT_THREADSAFE
4

2 回答 2

3

好吧,我找到了解决方法。

在我使用 boost::spirit::parse 调用的每个地方,我基本上都会产生一个工作线程来运行它,而调用线程在与工作线程的连接调用上阻塞。不理想,但到目前为止它似乎没有任何副作用。

仍然对任何替代方案感兴趣,因为我的直觉是不需要单独的线程。

于 2008-11-20T17:46:44.207 回答
1

Boost.Spirit 是header-only,即它不驻留在自己的dll 中,所以可能不是dll 的卸载顺序,而是另一个问题。

确保删除包含您的精神解析器的实例并且不留下悬空指针。

于 2008-11-20T16:31:37.307 回答