QProcess中读出标准

问题描述 投票:1回答:1

我有两个GUI应用程序,其中一个运行在其他使用QProcess中。第二个应用程序做了一些工作,并写了一个结果字符串到标准输出。所述第一应用程序正在等待从QProcess中被发射的readyReadStandardOutput信号。问题是第二个应用程序运行时,我没有收到这个信号 - 我必须关闭它来获取得到的字符串。我想同样的事情用一个简单的控制台应用程序,一切都很好。任何人都可以帮忙吗?

c++ qt qprocess
1个回答
2
投票

问题可能是标准的输出缓冲。既然你显然可以修改控制台应用程序,尝试添加std::flush,像

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

您也可以尝试在控制台应用程序中使用std::setvbuf禁用缓冲所有在一起,或者力线的缓冲,虽然我可能会更喜欢明确的冲洗,如果你有,你有输出的完整的一块,你可以一次刷新所有明确的地方。

出现这种情况,因为标准输出进行缓冲不同,具体取决于阉它在实际的终端/主机运行(具有TTY / PTY,更具体),或者如果输出是要的管。随着终端,人类可能是在看实时输出,以及行缓冲是实时和吞吐量之间的折中体面。随着管,输出到另一个程序,这通常不关心,当事情被刷新因此默认是刷新只有当缓冲区已满,以尽量减少IO开销,这甚至可以是当过程中退出。如果没有足够的输出填充缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.