複数のスレッドを使用してファイルに標準出力をリダイレクトします
質問
デバッグのために、StandART出力(COUT)をファイルにリダイレクトしようとしました
std::ofstream traceFile;
traceFile.open("c:/path/file.txt");
std::streambuf* fileBuff = traceFile.rdbuf();
std::cout.rdbuf(fileBuff);
std::cout << std::unitbuff;
std::cout << "disk is written\n";
ただし、新しいスレッドからCoutを呼び出すと、コードがミューテックスに貼り付けられます。 (xmtx.c 39:_mtxlock())。
あなたはアイデアを持っていますか、私はそれをどのように解決することができますか?
ありがとうございました
解決
これ 例 あなたのテストケースはそうではありませんが、私にとっては正常に動作します。私のマシンでは、コードはファイルからStreamBufを2倍にしているように見えましたが、この例はデストラクタが呼び出される前に戻します。
他のヒント
CoutのStreambufを元のものにリセットする必要があるかもしれません。
std::ofstream traceFile;
traceFile.open("c:/path/file.txt");
std::streambuf* fileBuff = traceFile.rdbuf(), *origBuf;
origBuf = cout.rdbuf(); //Save cout's StreamBuf pointer
std::cout.rdbuf(fileBuff); //Set cout's StreamBuf to file's StreamBuf pointer
std::cout << std::unitbuff;
std::cout << "disk is written\n";
cout.rdbuf(origBuf); //Reset cout's StreamBuf back to original
また、複数のスレッドで同じファイルに同時に書き込むことは許可されない場合があります。それが、Mutexの取得の失敗の理由かもしれません。
所属していません StackOverflow