首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QProcess断续读取标准输出

Qt QProcess断续读取标准输出
EN

Stack Overflow用户
提问于 2018-10-25 20:48:22
回答 1查看 63关注 0票数 0

我非常简单地使用了QProcess:

代码语言:javascript
复制
void MainWindow::startPing()
{
    auto p = new QProcess(this);

    connect(p, &QProcess::readyReadStandardOutput, this, &MainWindow::procStdout);
    connect(p, static_cast<void(QProcess::*)(int)>(&QProcess::finished), this, &MainWindow::procFinished); // workaround for overloaded 'finished' name

    p->start("C:\\windows\\system32\\ping.exe", "127.0.0.1");
}

void MainWindow::procStdout()
{    
    ui->textEdit->append("readyReadStandardOutput");
    auto msg = p->readAllStandardOutput();
    ui->textEdit->append(QString::fromUtf8(msg));
}

void MainWindow::procFinished()
{
    ui->textEdit->append("finished");
}

子进程在几秒钟之间打印几行标准输出,然后关闭。(例中使用了Ping;我有另一个应用程序需要阅读它的stdout)

这个代码在成千上万台机器上100%的工作。但最近我发现一台电脑非常非常不可靠。

在这台受影响的机器上,当您在Qt应用程序中运行这段代码时,第一次出现在任务管理器中,但是没有发出readyReadStandardOutput信号。最终发出finished信号。

如果你再试2-5次,它有时起作用,有时不起作用。

大约在第五次之后,它是完全可靠的。

该问题还会影响QProcess (即QProcess::waitForReadyRead)的同步使用。

上面的代码有什么问题会导致这种情况吗?或者这很可能是由Qt错误(5.6LTS)引起的?或者,是否有任何可能的方面,受影响的个人电脑,可以解释这种行为?

我试着用Qt::QueuedConnectionQt::DirectConnection连接信号,结果没有变化。我也尝试连接到stderr和QProcess::errorOccurred信号,但是没有错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-26 01:05:46

这可能与QTBUG-67744有关,与QProcess和stdout管道有关。

升级到Qt 5.11.2解决了受影响机器上的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52997887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档