c++ - 写入文件和stdout,std::cout未显示全部

标签 c++ stdout

我编写了一个类在应用程序中记录消息。该类具有登录到控制台,登录到文件或两者的选项。
如果队列为空,则线程将监视字符串队列。当我处理一个字符串以记录到文件时:

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/

相关文章:

c++ - Cocos2D X : How to check if a key exists for a plist file?

c++ - 在这种情况下要考虑的有效 C++ 数据结构

node.js - nodejs删除stdout行

linux - 根据内容将输出重定向到 3 个不同的文件

c++ - 用 C++ 解析 Yahoo 财务数据

c++ - 坂本智彦的查找星期几的算法是如何工作的?

c++ - GNU Radio 中的 noutput_items 是如何确定的?

.net - 捕获标准输出并仍将其显示在控制台窗口中

perl - Pod::Simple 没有输出

python - 如果在 python 中发生错误,则打印换行符