在Qt和C ++中从另一个应用程序启动一个应用程序会出现问题

时间:2012-12-11 13:40:50

标签: c++ qt process

我用QtCreator和C ++编写了一个qt快速桌面应用程序。

我想从我的应用程序启动另一个应用程序。我搜索并找到了这些选项: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文件所在的位置,如果我从命令行运行它,或者双击该文件,它运行良好,但是从我的应用程序 - 它运行有时很好,有时真的没有。

任何人都知道有什么理由或解决这个奇怪的问题?

任何答案都将不胜感激。

2 个答案:

答案 0 :(得分:3)

来自文档:

  

bool QProcess :: waitForFinished(int msecs = 30000)

     

如果进程完成,则返回true;否则返回false(如果是   如果发生错误,或者此QProcess是,则操作超时   已经完成了。)

如果您的流程在30秒内完成,则process->waitForFinished();返回true,否则返回false。

如果您不想要超时,请使用process->waitForFinished(-1);

答案 1 :(得分:2)

可能是超时问题吗?默认情况下,waitForFinished()等待30秒:

  

bool QProcess :: waitForFinished(int msecs = 30000)

     

阻止进程完成并发出finished()信号,或者直到msecs毫秒已经过去。

     

如果进程完成,则返回true;否则返回false(如果操作超时,如果发生错误,或者此QProcess已经完成)。

     

此功能可以在没有事件循环的情况下运行。在编写非GUI应用程序以及在非GUI线程中执行I / O操作时,它非常有用。

     

警告:从主(GUI)线程调用此函数可能会导致用户界面冻结。

     

如果msecs为-1,则此函数不会超时。

如果你想永远等待,你应该使用waitForFinished(-1)