我尝试将标准输出(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())。
你有什么想法,我怎么能解决它?
谢谢
答案 0 :(得分:1)
这个example对我来说很好,而你的测试用例却没有。在我的机器上,你的代码似乎从文件中双重释放了streambuf,而这个例子在调用析构函数之前将它交换回来。
答案 1 :(得分: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
此外,可能不允许同时通过多个线程写入同一文件。 这可能是获取互斥锁失败的原因。