gpt4 book ai didi

c++ - QProcess读取标准输出

转载 作者:行者123 更新时间:2023-11-30 04:04:24 26 4
gpt4 key购买 nike

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

最佳答案

问题可能出在标准输出缓冲上。由于您显然可以修改控制台应用程序,请尝试添加 std::flush , 像

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

您也可以尝试使用 std::setvbuf在控制台应用程序中一起禁用缓冲或强制行缓冲,但我可能更喜欢显式刷新,如果你有清晰的地方,你有完整的输出片段,你可以一次刷新所有。

发生这种情况是因为 stdout 的缓冲方式不同,具体取决于它是在实际的终端/控制台中运行(具有 tty/pty,更具体地说)还是输出到管道。使用终端,人们可能会实时查看输出,行缓冲是实时性和吞吐量之间的妥协。使用管道,输出将转到另一个进程,该进程通常不关心何时刷新,因此默认情况下仅在缓冲区已满时刷新以最小化 IO 开销,如果没有足够的输出到进程退出时甚至可能是填充缓冲区。

关于c++ - QProcess读取标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23759816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com