【问题标题】:Force boost logging core to shutdown?强制提升日志记录核心关闭?
【发布时间】:2017-02-21 13:31:50
【问题描述】:

有没有办法强制销毁 boost 日志核心单例?它可以通过以下方式访问:

boost::log::core::get();

它返回一个指向日志核心的共享指针。但是,我需要在我的应用程序关闭其他资源/分离 dll 等之前明确关闭/取消分配它...

这可能吗?

【问题讨论】:

    标签: boost-log


    【解决方案1】:

    不,单例仅在应用程序终止时被销毁。但是根据您要实现的目标,您可以使其释放某些资源。例如,通过调用remove_all_sinks,您可以使其释放所有接收器,这将导致它们被破坏,除非它们被其他地方引用。

    【讨论】:

    • 感谢安德烈。似乎 remove_all_sinks 没有帮助。我在插件中使用日志,当我的插件被卸载时,似乎 boost log dll 正在分离,然后 boost 线程库中的某些东西正试图访问 boost log 的内存。我在插件卸载时明确调用刷新并删除所有接收器,但它似乎没有帮助。只有 boost 日志正在使用 boost 线程库。
    • 1. Boost.Log 不支持插件卸载,因为它在内部保存了对各种静态数据和代码的引用。当库被卸载时,这些引用变得悬空。请注意,冲洗或移除水槽不会完全解决此问题。 2. Boost.Log 仅在使用异步日志记录时创建自己的线程,而这些线程在它们的接收器被销毁时加入。所以remove_all_sinks 返回后应该没有 Boost.Log 的线程处于活动状态。如果它们仍然处于活动状态,请创建一个带有重现和回溯的票证。
    • 谢谢,@andrey-semashev。这个信息非常有用。
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    相关资源
    最近更新 更多