QProcess:启动子进程,无需等待完成,但获得完成信号

时间:2014-02-12 11:04:33

标签: c++ qt qt4.8 qprocess

如何在QT应用程序中使用QProcess启动外部子进程,并继续执行主程序,而无需等待子进程完成,但同时从中获取回调他完成后的孩子过程?

第一种情景:

QProcess* child = new QProcess();
connect(child, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(isFinished( int, QProcess::ExitStatus )));
child->start( "example.exe", QStringList() << path);
.
.
. further execution of main application

此处启动子进程,主应用程序继续执行, 但是,虽然信号/插槽连接没有任何QT错误, 孩子完成后没有回调。

第二种情景:

QProcess* child = new QProcess();
connect(child, SIGNAL(finished(int, QProcess::ExitStatus)), this,       SLOT(isFinished( int, QProcess::ExitStatus )));
child->start( "example.exe", QStringList() << path);
child->waitForFinished();
.
.
. NO further execution of main application

此处启动子进程,主应用程序不执行, 从信号/插槽完成的回调正确。 两者都不是我想要的。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

失败是在第一个场景中无休止/无效的块,因此qt应用程序的主事件循环中的信号/槽处理无法正确完成。

提示:我们的解决方案是使用qthread来处理每个外部qprocess。 考虑必要的互斥体。