2017-02-21 18 views
0

ブーストロッキングコアシングルトンを強制的に破壊する方法はありますか?ロギングコアを強制的にシャットダウンに強制しますか?

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

これは、ロギングコアへの共有ポインタを返します。しかし、アプリケーションを閉じる前に、明示的にシャットダウン/割り振りを解除する必要があります。

これは可能ですか?

答えて

1

いいえ、シングルトンはアプリケーション終了時にのみ破棄されます。しかし、達成しようとしていることに応じて、特定のリソースをリリースできるようにすることができます。たとえば、remove_all_sinksを呼び出すと、他の場所から参照されていない限り、すべてのシンクが解放され、そのシンクが破棄されます。

+0

ありがとうございました、アンドレイでキミをしてください。 remove_all_sinksが役に立たないようです。 プラグインでログを使用していて、プラグインがアンロードされていると、ブーストログDLLが切り離されているように見えます。ブーストスレッドのlibの何かがブーストログのメモリにアクセスしようとしています。私は明示的にflushを呼び出しており、プラグインのアンロード時にすべてのシンクを削除していますが、それは役に立たないようです。 ブーストログのみがブーストスレッドlibを使用しています。 – JeffV

+0

1. Boost.Logはさまざまな静的データおよびコードへの参照を内部的に保存するため、プラグインのアンロードをサポートしていません。ライブラリがアンロードされると、それらの参照はぶら下がります。シンクをフラッシュまたは削除しても、これは完全には解決されません。 2. Boost.Logは、非同期ロギングが使用されているときにのみ独自のスレッドを作成し、シンクが破棄されるとそれらのスレッドが結合されます。したがって、 'remove_all_sinks'の後にBoost.Logのスレッドがアクティブになるべきではありません。まだアクティブな場合は、レプロとバックトレース付きのチケットを作成してください。 –

+0

ありがとう、@ andrey-semashev。この情報は非常に便利です。 – JeffV

関連する問題