Umleiten der Standardausgabe in eine Datei unter Verwendung von Mehrfachgewinden
Frage
Ich habe versucht, standart Ausgang (cout) in eine Datei für Debugging-Zwecke
umleitenstd::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";
Aber Aufruf cout von einem neuen Thread macht den Code auf einem Mutex stecken. (Xmtx.c 39: _Mtxlock ()).
Haben Sie eine Idee, wie ich es lösen könnte?
Danke
Lösung
Das Beispiel funktioniert gut für mich, während Ihr Testfall doesn‘ t. Auf meinem Rechner schien Ihr Code die streambuf aus der Datei zu verdoppeln zu befreien, während dieses Beispiel Swaps es zurück, bevor die Destruktoren aufgerufen werden.
Andere Tipps
Vielleicht müssen Sie cout des streambuf auf Original zurückgesetzt.
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
Auch das Schreiben in dieselbe Datei von mehreren Threads gleichzeitig nicht erlaubt werden kann. Das kann Grund für das Scheitern der Übernahme von Mutex sein.