2014-02-12 13 views
0

怎麼可能先從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 

這裏的子進程啓動,主要的應用程序去不與執行, 和信號完成的回調/段到來正確。 這兩個都不是我想要的。

任何想法?

+0

很奇怪,第一種情形應該很好地工作。見演示\嵌入式\ fluidlauncher \ demoapplication.cpp和qt4.8目錄演示\ qtdemo \ menumanager.cpp,我沒有看到你的代碼和Qt樣品之間的差異。 – Bogdan

+0

第一種方案適用於我們,並且是正確的實施。 –

+0

在處理完成之前可能會刪除'this'對象? –

回答

0

的失敗是在一段時間/真正的塊,在第一個場景是無止境的,所以信號/插槽Qt的應用程序的主事件循環處理不能做到正確的。

提示:解決方案對我們來說是使用一個QThread的處理每一個外部QProcess中。 互斥鎖認爲它是必要的。