0

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がスレッドローカルストレージをサポートしていることがわかります。

何か考えや警告はありますか?

ありがとう、

ケニー

4

1 に答える 1

0

Boostスレッドローカルストレージを使用し、各ロガーをファイルまたはcoutのいずれかにデータをファネルするオブジェクトに登録しました。

ケニー

于 2011-08-18T16:51:27.153 に答える