检测过程已在QT中完成
Detect a Process has finished in Qt
我正在使用QT 5.0.2开发Windows Form应用程序。我需要在我的期间调用另一个程序,这是一个控制台申请。我想通过命令行或文件传递参数,并通过另一个文件读取期望结果,但是由于某些原因,我需要在程序完成其工作并准备好读取期望文件时。
我的过程定义如下:
QProcess *p;
p = new QProcess(this);
QStringList args;
args << "babak" << "Ali" << "Mohsen";
p->execute("ConsoleApplicationCSH.exe" ,args)
我知道我可以使用start
而不是execute
,但是结果是相同的。我试图通过此代码进行检查:
while(!p->waitForFinished()){
;
}
exit(1);
所编写的方式是,它需要大约10秒的时间才能完成它的过程,但是while
循环未完成。我检查了使用此方法和一些类似方法的另一种形式,但我没有任何好结果。
首先,您需要使用qprocess :: start()而不是qprocess :: execute():execute()是一种静态方法,是运行该过程并阻止直到完成的静态方法。因此,当execute()返回时,该过程已经完成。使用start()运行该过程而不会阻止。
然后,在GUI代码中,您应该连接到完成()和错误()信号,以了解成功的终止和错误(如果发生错误,请检查errorString())。
如果在主线程中运行,请waitforfined()阻止UI,因此通常不希望使用阻止调用。请注意,WaitforFined()不仅在超时时返回false,而且"如果操作计时,如果发生错误,或者此Qprocess已经完成"。连接到完成()和error()是检测错误案例的更强大方法。如果您真的想以阻塞方式(例如,在辅助线程或非GUI程序中),请首先致电qprocess :: waitforstarted(),以检测该过程甚至无法更干净地启动。<<<<<<<<<<<<<<
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- QT通过C++添加映射QML项目
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用 Qt 测量过程的实际运行时间
- QT在跑步过程中崩溃
- 找不到构造函数 - 如何将 CPP 文件添加到 Qt 构建过程
- 检测过程已在QT中完成
- 为什么Qt Creator找到typedef,而不是构建过程
- Qt的编译过程
- C++Qt在单独的过程中运行应用程序的各个部分
- Qt:解构过程中的儿童生活对象
- 使用QT过程,使用命令行从笔记本电脑获取传感器信息
- Qt创建gst启动过程
- Mysql创建过程(创建语句)在qt