c – Boost中的线程访问冲突在关闭时登录
发布时间:2020-12-16 07:20:37 所属栏目:百科 来源:网络整理
导读:我有一个使用boost记录的应用程序.在关闭期间,它会在空指针访问时获得访问冲突.当我逐步执行代码到失败点时,看起来boost :: log dll正在被解除分配,然后boost :: thread代码尝试访问曾经被log dll占用的内存. 我没有在我自己的代码中使用任何boost线程,因此
我有一个使用boost记录的应用程序.在关闭期间,它会在空指针访问时获得访问冲突.当我逐步执行代码到失败点时,看起来boost :: log dll正在被解除分配,然后boost :: thread代码尝试访问曾经被log dll占用的内存.
我没有在我自己的代码中使用任何boost线程,因此假设boost-thread dll由boost log使用. 为了确保在关机之前销毁所有接收器,我打电话给:core-> flush()和core-> remove_all_sinks() 我正在使用boost 1.60并且还尝试使用boost 1.63.结果相同. 有没有办法确保在退出/卸载dll之前完全关闭boost记录核心? 解决方法
此问题可能与boost系统设置的语言环境对象有关.同样在你的情况下,这个语言环境可能会在Boost.Log被取消初始化之前被销毁,从而导致崩溃.
根据boost docs特别是日志文件旋转模块.他们为类似案例Boost known issues提供了一种解决方法 解决方案是在主循环中初始化语言环境,以便boost有足够的周期来最后进行清理. int main(int argc,char* argv[]) { boost::filesystem::path::imbue(std::locale("C")); initialize_log(); // ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |