检测过程已在QT中完成

Detect a Process has finished in Qt

本文关键字:QT 过程 检测      更新时间:2023-10-16

我正在使用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(),以检测该过程甚至无法更干净地启动。<<<<<<<<<<<<<<