Boostは初めてで、スレッド化されたアプリケーションで機能する必要のあるロギングクラスを再設計しています。それはostreamオブジェクトのように機能するように設計されましたが、「機能しませんでした」(Davinciのヘリコプターへの彼の言及を知っている人のためにEddy Izzardの声で言いました)。
次のように使用できます。
Logger &logger = Logger::instance();
logger << "He designed a helicopter you know...that did not work." << endl;
したがって、元々はシングルトンとして設計されており、いくつかのアプローチの後、おそらくLogger :: instance()がスレッドに固有のロガーを返すことができると思いました。STLを使用して、BoostThreadIDとLoggerクラスのインスタンスの間のマップを定義する場合があります。
それから私は、スレッドローカルストレージの形式を使用してこれを行うためのよりスマートな方法があるのではないかと考え始めました。
マップの問題の1つは、スレッドが終了したときに定期的にロガーを削除するために、ハウスクリーニングを実行する必要があることです。私は物事を再発明しているように感じ始めました。
Boostがスレッドローカルストレージをサポートしていることがわかります。
何か考えや警告はありますか?
ありがとう、
ケニー