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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top