QProcess阅读标准出来了

时间:2014-05-20 12:26:28

标签: c++ qt qprocess

我有两个GUI应用程序,其中一个使用QProcess运行另一个。第二个应用程序执行一些工作并将结果字符串写入标准输出。第一个应用程序正在等待从QProcess发出readyReadStandardOutput信号。问题是我在第二个应用程序运行时没有收到此信号 - 我必须关闭它才能获得结果字符串。我用一个简单的控制台应用程序尝试了同样的事情,一切都很好。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

问题可能是标准输出缓冲。由于您显然可以修改控制台应用,因此请尝试添加std::flush,例如

std::cout << "FUBAR" << std::flush;

您还可以尝试在控制台应用程序中使用std::setvbuf来禁用所有缓冲或强制线缓冲,但如果您有明确的地方可以完成输出,那么我可能更喜欢显式刷新可以一次冲洗所有。

这种情况发生了,因为 stdout 的缓冲方式不同,这取决于它是否在实际的终端/控制台中运行(具有tty / pty,更具体)或者输出是否进入管道。有了终端,人类可能会实时查看输出,而线路缓冲是实时和吞吐量之间的妥协。使用管道,输出将转到另一个进程,这通常在刷新内容时并不关心,因此默认情况下仅在缓冲区已满时才进行刷新以最大限度地减少IO开销,这甚至可能是在进程退出时如果没有&#39;足够的输出来填充缓冲区。