2017-02-21 96 views
0

有没有办法强制破坏升压记录核心单身人士?它可以通过以下方式访问:强制升压记录核心关机?

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

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

这可能吗?

回答

1

不,该单例只在应用程序终止时被破坏。但取决于你想要达到的目标,你可以让它释放某些资源。例如,通过调用remove_all_sinks,您可以释放所有接收器,这会导致其销毁,除非它们是从别处引用的。

+0

谢谢你,在安德烈的指点下。 看来remove_all_sinks没有帮助。 我在插件中使用日志,并且当我的插件被卸载时,似乎boost日志dll被分离,然后boost线程库中的某些东西正在尝试访问boost日志的内存。我明确地调用flush并删除插件上的所有接收器,但它似乎没有帮助。 只有boost日志正在使用boost线程库。 – JeffV

+0

1. Boost.Log不支持插件卸载,因为它在内部保存对各种静态数据和代码的引用。当图书馆被卸载时,这些参考文献变得悬而未决。请注意,冲洗或移除水槽不会完全解决此问题。 2.当使用异步日志记录时,Boost.Log只创建它自己的线程,并且这些线程在其接收器被销毁时连接。所以在'remove_all_sinks'返回后,不应该有Boost.Log的线程激活。如果它们仍然有效,请创建一个带有repro和backtrace的票。 –

+0

谢谢,@ andrey-semashev。这个信息非常有用。 – JeffV