質問
を実装したい単純なクラスのログインから複数のスレッド)。の考えがあり、それぞれ希望するオブジェクトのログも受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なく一時的な変数ということで、メッセージのログを一時ストリームをフラッシュします。
休業させていただき、質問して他の日が異なる提案/問題にしていることができるのか検討する。