7

我想用 Qt 启动一个 shell 脚本。

QProcess process;
process.start(commandLine, QStringList() << confFile);
process.waitForFinished();

if(process.exitCode()!=0)
{
    qDebug () << " Error " << process.exitCode() << process.readAllStrandardError();
}
else
{
    qDebug () << " Ok " << process.readAllStrandardOutput() << process.readAllStrandardError();
}

结果是:

好的:结果...." "" QProcess:在进程仍在运行时被销毁。

此消息并非每次都出现。

问题是什么?

4

2 回答 2

17

process.waitForFinished();正在达到默认的 30 秒超时。改为使用process.waitForFinished(-1);。这将确保您等待该过程完成所需的时间,而不会出现任何超时。

于 2013-01-24T16:08:01.697 回答
3

请注意,您将 QProcess 创建到本地范围内。这意味着当您退出范围时,该对象将被删除。在析构函数中 QProcess 进程终止。当进程在析构函数中终止时,“进程仍在运行”的消息“已销毁”。

为了解决这个问题,你应该在进程已经终止时调用 QProcess 析构函数。

如果将 QProcess::waitForFinished(-1) 放入您的示例中,它将发生,但这会阻止您的应用程序。

于 2013-01-24T17:09:10.583 回答