2017-02-21 99 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