QProcess返回退出代码但没有退出?

时间:2015-11-18 06:29:53

标签: qt qprocess

我计划使用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()));

结果全部为“零”。

0
0
0
0
0
0
0
0

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

我是否误解了QProcess的exitcode函数?

1 个答案:

答案 0 :(得分:1)

问题是你正在混淆“火”并忘记' API startDetached包含阻塞(非事件循环)waitFor方法,这些方法适用于QProcess实例。

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

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