我非常简单地使用了QProcess:
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::QueuedConnection和Qt::DirectConnection连接信号,结果没有变化。我也尝试连接到stderr和QProcess::errorOccurred信号,但是没有错误。
发布于 2018-10-26 01:05:46
这可能与QTBUG-67744有关,与QProcess和stdout管道有关。
升级到Qt 5.11.2解决了受影响机器上的问题。
https://stackoverflow.com/questions/52997887
复制相似问题