2012-12-11 47 views
0

我已經用QtCreator和C++編寫了一個qt快速桌面應用程序。從Qt和C++中的另一個應用程序啓動一個應用程序問題

我想從我的應用程序啓動另一個應用程序。我搜索並找到了這些選項:Qprocess,具有函數:start,startDetached和execute。

我想要啓動的應用程序是單個應用程序,其他人建議我使用函數startDetached。

我選擇了startDetached功能的此選項:

bool startDetached (const QString & program, const QStringList & arguments, const QString & workingDirectory, qint64 * pid = 0) 

這裏是我的代碼:

QProcess *process=new QProcess(this); 
bool res; 
    QStringList argsList; 
    argsList.append("-start"); 
    process->startDetached(emulauncherInstallationDirectory + "\\Emulauncher.exe",argsList,emulauncherInstallationDirectory); 
    res = process->waitForFinished(); 
    delete process; 
    process=NULL; 
    return res; 

,但是當我跑步時我的應用程序,它工作得很好,有時,和不在其他時間工作。

我已經調試了很多次,看到該功能

流程 - > waitForFinished();

返回false或true,沒有任何明顯的原因:在任何時候.exe文件都在它的位置,如果我從命令行運行它,或者通過雙擊文件,它運行良好,但從我的應用程序 - 它有時運行良好,有時甚至沒有。

任何人都知道任何理由或任何解決這個奇怪的問題?

任何答案將不勝感激。

回答

3

從文檔:

布爾QProcess中:: waitForFinished(INT毫秒= 30000)

返回true如果過程結束;否則返回false(如果 操作超時,如果發生錯誤,或者此QProcess已經完成 )。

所以process->waitForFinished();返回true,如果你的過程在30秒內完成,否則爲false。

如果您不想超時,請使用process->waitForFinished(-1);

2

它可能是超時問題?默認情況下,waitForFinished()等待30秒:

布爾QProcess中:: waitForFinished(INT毫秒= 30000)

塊,直到過程已經完成和完成的()信號已被髮出,或直到毫秒毫秒有通過。

如果過程完成,則返回true;否則返回false(如果操作超時,如果發生錯誤,或者如果此QProcess已完成)。

該函數可以在沒有事件循環的情況下運行。在編寫非GUI應用程序時以及在非GUI線程中執行I/O操作時非常有用。

警告:從主(GUI)線程調用此函數可能會導致您的用戶界面凍結。

如果msecs爲-1,則該函數不會超時。

,如果你想永遠等待你應該使用waitForFinished(-1)

相關問題