la salida estándar de redirección a un archivo con múltiples hilos
Pregunta
He intentado redirigir la salida estandar (cout) en un archivo, para fines de depuración
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";
Pero llamar a cout de una nueva marca de rosca el código pegado en un mutex. (Xmtx.c 39: _Mtxlock ()).
¿Usted tiene una idea, cómo podría resolverlo?
Gracias
Solución
ejemplo me da buenos resultados, mientras que su caso doesn prueba' t. En mi máquina el código parecía duplicar liberar el streambuf del archivo, mientras que este ejemplo permutas de nuevo antes de que los destructores se llaman.
Otros consejos
Puede ser que necesita para restablecer streambuf de cout posible a la 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
Además, la escritura en mismo archivo de múltiples hilos simultáneamente puede no estar permitida. Esa puede ser la razón para el fracaso de la adquisición de exclusión mutua.