Qt readAllStandardOutput()标准读数据流无法实时读取

记录一个标准数据流Debug的过程。

错误情况:

Qt的readAll()与readAllStandardOutput()能读取数据流,但不能实时读取,是一大段一大段的文本打印。

1. 项目结构

这张图应该比较好解释,首先有一个项目文件封装成exe作为内核,Bat脚本文件会调用多个不同的exe完成一系列的内容,Qt开发界面与简单的业务处理。

Qt调用脚本文件,其中bat和exe都有输出流。

2. 问题分析

Qt中关于获取标准读的用法如下:

connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(showOut()));

void Thread::showOut()
{
    QString outstr = process->readAllStandardOutput().data();
    cout << outstr.toStdString();
}

既然槽函数没法实时刷新,很有可能是readyReadStandardOutput()信号没法出来。

了解到 fflush(stdout) 能强制刷新缓冲区,即发出readyReadStandardOutput()信号。

最初我以为是需要在Bat脚本文件中强制刷新,找了半天也没找到解决办法。

之后转而在项目文件(exe源码)中强制刷新,之后就可行了,为了确保稳定,在Qt也加上了 fflush(stdout)。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值