Frage

Ich habe versucht, standart Ausgang (cout) in eine Datei für Debugging-Zwecke

umleiten
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";

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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top