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()
启动进程 运行,而不是分离版本。
当然,对于生产代码,您可能希望使用信号和事件循环来完全避免阻塞,但这不是这里的特定问题。
我打算用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()
启动进程 运行,而不是分离版本。
当然,对于生产代码,您可能希望使用信号和事件循环来完全避免阻塞,但这不是这里的特定问题。