我编写了一个类在应用程序中记录消息。该类具有登录到控制台,登录到文件或两者的选项。
如果队列为空,则线程将监视字符串队列。当我处理一个字符串以记录到文件时:
if ( (blnOpen = clsDebugService::msFile.isOpen()) != true ) {
clsDebugService::msFile.open(QIODevice::WriteOnly | QIODevice::Text);
blnOpen = clsDebugService::msFile.isOpen();
}
if ( blnOpen == true ) {
QTextStream tsText(&clsDebugService::msFile);
tsText << strLine.toLatin1().data() << "\r\n";
}
这可以正常工作,并且我可以看到文件中记录的信息始终是完整的,但是当我执行以下操作以输出到控制台时:if ( clsDebugService::msblnToConsole == true ) {
std::cout << strLine.toLatin1().data() << "\n";
std::cout << std::flush;
}
有时,实际上,控制台中显示的消息经常不完整,并且在字符串末尾缺少一些字符。最初,我在将数据发送到控制台的同一条语句的末尾处有std::flush,这样做是一样的,所以我将其更改为上述希望能够解决的问题,但没有。
最佳答案
因此,看起来std::flush不等待上一条语句完成?
你可以尝试像std::cout.setf(std::ios::unitbuf);
这样的东西吗?看看是否有帮助。 (从性能的角度来看,我不建议这样做)。
(这也可能过时需要std::flush)。
关于c++ - 写入文件和stdout,std::cout未显示全部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64353959/