QProcess returns 退出代码还没有退出?

QProcess returns exit code yet doesn't exit?

我打算用QProcess在我的电脑上执行一个程序(.exe),处理一个已经存在的文件,然后输出一个新文件,继续下一步,整个过程大约需要3到5秒。

但是,虽然确实出现了执行该过程的过程屏幕运行,并且我还写了一行代码来检测该过程是否已完成,然后进行下一步,但是仍然不能'不要停止项目不等待执行以下步骤。

换句话说,我的项目将尝试打开一个不存在的文件,因为它在之前的代码中仍在处理中。

所以我写了一个简单的代码来测试一下:

QProcess *proc = new QProcess(this);
ui->textEdit->append(QString("%1").arg(proc->state()));
ui->textEdit->append(QString("%1").arg(proc->exitCode()));
ui->textEdit->append(QString("%1").arg(proc->waitForStarted()));
ui->textEdit->append(QString("%1").arg(proc->waitForFinished()));
proc->startDetached("cmd");
ui->textEdit->append(QString("%1").arg(proc->state()));
ui->textEdit->append(QString("%1").arg(proc->exitCode()));
ui->textEdit->append(QString("%1").arg(proc->waitForStarted()));
ui->textEdit->append(QString("%1").arg(proc->waitForFinished()));

结果都是"zero".

0
0
0
0
0
0
0
0

但是 cmd.exe 控制台就在那里,

我是否误解了 QProcess 的退出代码函数?

问题是您将 'fire and forget' API startDetached 与阻塞(非事件循环)waitFor 方法混合使用 QProcess 实例。

如果要编写阻塞代码,请使用 start() 启动进程 运行,而不是分离版本。

当然,对于生产代码,您可能希望使用信号和事件循环来完全避免阻塞,但这不是这里的特定问题。