Question

J'ai essayé de rediriger la sortie standart (cout) dans un fichier, pour des fins de débogage

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

Mais l'appel d'un nouveau Cout fil faire le code coincé sur un mutex. (Xmtx.c 39: _Mtxlock ()).

Avez-vous une idée, comment je pourrais le résoudre?

Merci

Était-ce utile?

La solution

exemple fonctionne très bien pour moi, tandis que votre cas de test n » t. Sur ma machine, votre code semblait doubler libérer le streambuf du fichier, alors que cet exemple des swaps en arrière avant que les Destructeurs sont appelés.

Autres conseils

Peut être que vous devez réinitialiser le streambuf de Cout à l'original.

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

En outre, l'écriture en même fichier par plusieurs threads simultanément ne peut pas être autorisée. Cela peut être la raison de l'échec de l'acquisition de mutex.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top