rediriger la sortie standard vers un fichier en utilisant un fil multiple
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
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.