我计划使用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
我是否误解了QProcess的exitcode函数?
答案 0 :(得分:1)
问题是你正在混淆“火”并忘记' API startDetached
包含阻塞(非事件循环)waitFor
方法,这些方法适用于QProcess
实例。
如果要编写阻止代码,请使用start()
启动进程运行,而不是分离版本。
当然,对于生产代码,您可能希望使用信号和事件循环来避免阻塞,但这不是特定的问题。