在Qt和C++中从另一个应用程序启动一个应用软件会产生问题
Starting one Application from another Application in Qt and C++ does Problems
我用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;
但是当我运行我的应用程序时,它有时工作得很好,而在其他时候根本不工作。
我调试了很多次,看到的功能
process->waitForFinished();
返回false或true,没有明显的原因:在所有时间里,.exe文件都在它的位置上,如果我从命令行运行它,或者双击文件,它运行得很好,但从我的应用程序来看,它有时运行得好,有时真的不运行。
有人知道这个奇怪问题的任何原因或解决方案吗?
任何答复都将不胜感激。
来自文档:
bool QProcess::waitForFinished(int msecs=30000)
如果进程已完成,则返回true;否则返回false(如果如果发生错误,或者如果此QProcess已完成)。
因此,如果进程在30秒内完成,则process->waitForFinished();
返回true,否则返回false。
如果您根本不想超时,请使用process->waitForFinished(-1);
。
这可能是超时问题吗?默认情况下,waitForFinished()
等待30秒:
bool QProcess::waitForFinished(int msecs=30000)
块,直到进程完成并发出finished()信号,或者直到毫秒过去。
如果进程已完成,则返回true;否则返回false(如果操作超时、发生错误或此QProcess已完成)。
此函数可以在没有事件循环的情况下运行。它在编写非GUI应用程序和在非GUI线程中执行I/O操作时非常有用。
警告:从主(GUI)线程调用此函数可能会导致用户界面冻结。
如果毫秒为-1,此功能将不会超时。
如果您想永远等待,则应该使用waitForFinished(-1)
。
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 将库链接到另一个应用程序时,CMAKE 找不到库
- 调试控制台 ChessEngine.exe "used"在另一个应用程序(国际象棋 GUI)中
- 在 Windows 10 中将一个应用程序放在另一个应用程序前面
- 将数据从一个应用程序单向发送到另一个应用程序的最佳做法
- 当电子的窗口隐藏时如何激活另一个应用程序窗口
- 与 Python 中子进程中的另一个应用程序的交互式会话
- 从另一个应用启动我的应用时出现相对路径更改问题
- 即使另一个应用具有焦点,检测F1密钥的按键(和覆盖)键
- 如何将Qt嵌入到另一个应用程序中(非阻塞方式)
- 在一个应用中使用 AES 加密数据,并在另一个 C++ WinCrypt 中解密
- 调试从 Linux 中的另一个C++应用程序启动的 python 脚本
- 在 Linux 上编译一个 c++ 应用程序,并在 TI TIVA TM4C123GH6PM上刷新它
- 另一个应用程序用 c++ 在 Windows 上的线程中破坏 QTimer
- 为什么我需要运行一个应用程序作为Papi库工作的根源
- 使用Time-Stamp作为一个持久软件的INT可以吗?
- 当从一个应用程序调用时,在DLL方法中创建COM接口指针是有效的,但当从另一个应用软件调用时则无效
- 在Qt和C++中从另一个应用程序启动一个应用软件会产生问题
- 一个应用程序可以运行另一个应用软件的代码吗