我用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文件所在的位置,如果我从命令行运行它,或者双击该文件,它运行良好,但是从我的应用程序 - 它运行有时很好,有时真的没有。
任何人都知道有什么理由或解决这个奇怪的问题?
任何答案都将不胜感激。
答案 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)
。