我在使用Boost.Spirit和Boost.Thread时遇到了崩溃 我的应用程序中的库。只有我使用了圣灵才会发生这种情况 在主线程的进程生命周期内解析器。
崩溃发生在退出处,似乎与清理有关 由Spirit解析器分配的线程特定存储。 由于DLL的顺序,它可能会崩溃 卸载,因为特定于线程的内存在DLL内部分配 已经卸载了。但是,在应用程序本身退出的情况下,Boost.Thread DLL不会被卸载。
我是否有办法强迫Spirit清除其特定的线程 存储,例如在我的dll-main中,当我收到进程分离通知时?
任何解决方案/提示都将不胜感激。
PS! 我的平台和设置:
答案 0 :(得分:3)
我找到了解决方法。
我使用boost :: spirit :: parse调用的每个地方,我基本上都会生成一个workerthread来运行它,而调用线程在与workerthread的连接调用中阻塞。不理想,但到目前为止似乎没有任何副作用。
仍然对任何替代方案感兴趣,因为我的直觉是不应该真正需要单独的线程。
答案 1 :(得分:1)
Boost.Spirit只是标题,即它不存在于自己的dll中,所以也许它不是dll的卸载顺序,而是一个不同的问题。
确保删除包含您的精神解析器的实例,并且不会留下悬空指针。