gpt4 book ai didi

c++ - 在 Qt 中检测进程已完成

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:31 25 4
gpt4 key购买 nike

我正在使用 Qt 5.0.2 开发 Windows 窗体应用程序。我需要在我的过程中调用另一个程序,这是一个控制台应用程序。我想通过命令行或文件传递参数,并通过另一个文件读取预期结果,但是,由于某些原因,我需要在程序完成其工作并且准备好读取预期文件时执行此操作。
我的流程定义如下:

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 代码中,您应该连接到 finished()error()了解成功终止和错误的信号(如果出现错误,请检查 errorString())。

如果在主线程中运行,waitForFinished() 会阻塞 UI,因此通常不希望使用阻塞调用。请注意,waitForFinished() 不仅在超时时返回 false,而且“如果操作超时、发生错误或此 QProcess 已完成”。连接到 finished() 和 error() 是检测错误情况的更可靠方法。如果你真的想以阻塞方式使用它(例如,在辅助线程或非 GUI 程序中),请调用 QProcess::waitForStarted()首先,检测进程甚至无法更干净地启动的情况。

关于c++ - 在 Qt 中检测进程已完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21360583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com