Home Articles

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

Asked
Viewed 703 times
0

我计划使用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 Answer

  • 1

    问题是你使用阻塞(非事件循环) waitFor 方法来解决 QProcess 实例上的问题并忘记'API startDetached .

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

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

Related