1

我试图将标准输出(cout)重定向到一个文件,以进行调试

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

但是从新线程调用 cout 会使代码卡在互斥体上。(xmtx.c 39: _Mtxlock())。

你有一个想法,我怎么能解决它?

谢谢

4

2 回答 2

1

这个例子 对我来说很好,而你的测试用例却不行。在我的机器上,您的代码似乎从文件中双重释放了 streambuf,而此示例在调用析构函数之前将其交换回来。

于 2010-11-08T10:35:05.843 回答
0

可能您需要将 cout 的 streambuf 重置为原始。

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

此外,可能不允许多个线程同时写入同一文件。这可能是互斥量获取失败的原因。

于 2010-11-08T10:56:05.727 回答