ブースト スレッド スタティック ライブラリは、スレッド固有のデータをクリーンアップするためにスレッド ローカル ストレージ コールバックを使用するため、C++/CLI コードでは使用できません。ブースト ライブラリをビルドするときに tss_pe.obj を除外することで、これらのコールバックを無効にすることができます。これにより、マネージ コードでライブラリを使用できるようになりますが、これらのリソースを手動でクリーンアップする必要があります。
これは公式に文書化されていませんが、この手動クリーンアップに必要なさまざまなバグ/フォーラムの投稿 (例: https://svn.boost.org/trac/boost/ticket/1848 )からまとめました。
- 「boost::thread によって管理されていない」スレッドを終了するときに on_thread_exit() を呼び出します。これが何を意味するのか、Boost スレッドが管理していないスレッドのリソースをクリーンアップする責任を負う理由については、私にはよくわかりません。
- main の最初と最後で on_process_enter と on_process_exit を呼び出している可能性もあります ( http://lists.boost.org/Archives/boost/2007/11/130440.php )。
以前にスレッド ローカル ストレージを使用したことがないライブラリの新しいユーザーとして、これらの簡潔なガイドラインを完全に理解していることを確認したいと思います。マネージ クラスもいくつか含まれている COM DLL 内のアンマネージ コードからブースト スレッドを使用します。
自動クリーンアップが無効になっているときにリソースのリークを避けるために上記の関数を呼び出す必要がある正確な状況について、例を挙げてより詳細な説明を誰かが提供できますか?