質問

を実装したい単純なクラスのログインから複数のスレッド)。の考えがあり、それぞれ希望するオブジェクトのログも受ostream-オブジェクトで書きのメッセージを通常のものです。希望の行動は、メッセージに追加された場合にログストリームのフラッシュされます。このようにメッセージを取得しませんの中にはからのメッセージを他のスレッド)。避けたい時にstringstreamのメッセージとしてしまうようなものメッセージの少なくともtwoliners.私の見るところでは、標準の向こうのを自分のstreambufferが、これは、非常に煩雑なエラーが発生しやすい.いよいのか。なんとに良い記事/ハウトゥド、ガイドのカスタムスstreambufs?

おかげさまで、事前に

Space_C0wbo0y

更新:

と思われるからで仕事をやっていきたいと思い自分の答えです。

役に立ちましたか?

解決 2

そこで、私を見て が進みました。IOstreams こんどろ風mikiモデルを作ってみち:

class TestSink : public boost::iostreams::sink {
public:
    std::streamsize write( const char * s, std::streamsize n ) {
        std::string message( s, n );
            /* This would add a message to the log instead of cout.
               The log implementation is threadsafe. */
        std::cout << message << std::endl;
        return n;
    }
};

TestSink に利用することができますストリームバッファを参照 stream_buffer-テンプレート).各スレッドまでのインスタンス TestSink, ものすべて TestSinks 書と同一のログです。 TestSink がこんなところに使用されています:

TestSink sink;
boost::iostreams::stream_buffer< TestSink > testbuf( sink, 50000 );
std::ostream out( &testbuf );

for ( int i = 0; i < 10000; i++ )
    out << "test" << i;

out << std::endl;

大切なのはここでは、 TestSink.write する場合にだけ呼び出されストリームのフラッシュ(std::endl または std::flush場合や、内部バッファの stream_buffer インスタンスは、デフォルトのバッファサイズとはできない40000字んinitalizeで50000).このプログラム TestSink.write が呼び出され、一度の出力が長すぎる。こうしておきlogmessage通常の形式のストリーム-IOなく一時的な変数ということで、メッセージのログを一時ストリームをフラッシュします。

休業させていただき、質問して他の日が異なる提案/問題にしていることができるのか検討する。

他のヒント

log4cpp;このマルチスレッドです。することもできます。

があると考えまlog4cppが重すぎやまのために効果がある。IOStreamsょうか?あれ?

が大きく異なるため別途ご相談承 logog.このスレッドの安全のためのPOSIX Win32とWin64.

Re.自分に応じます。ご利用の場合はこのエラーログといプログラムの衝突前のフラッシングストリームのそのログインは駄目ですね。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top