QProcess完成信号

问题描述 投票:0回答:1

我们有一个运行bash脚本的QProcess。脚本正确完成并产生预期的输出,但是完成的信号之后需要很长的时间(分钟)才能发出。基本上,我们的脚本从作为参数输入的文件列表中生成加密的tarball。最终的软件包完好无损地坐在磁盘上,但是Process需要很长时间才能返回。这将阻止我们的UI继续执行下一个任务,因为我们需要确保脚本以编程方式而不是通过检查运行至完成。除了

,我们什么都没做
connect(myProcess, SIGNAL(finished()), mySlot, SLOT(tidyUp()));
myProcess.start();

我们可以使用Qt监视文件的大小,并根据我们提供给脚本的文件列表来估计其最终大小,但是在文件达到其估计大小之后,脚本会挂起很长一段时间。我们插入了sync语句,但这似乎没有任何效果。当在命令行上运行脚本时,文件会增长,并且一旦达到最终大小,脚本便会停止。

为什么QProcess在脚本完成后不立即发送完成信号?

我们非常想附加一个进度条,该进度条指示所产生的文件大小的百分比,或提供其他进度指示,但是我们对此行为感到困惑。我们尝试过使用工作线程移动到QThread,并在繁忙的循环中直接运行QProcess,并调用processEvents()无效。

bash qt qthread qprocess
1个回答
0
投票

原来这是我在管道中使用的命令的问题。 GPG会相当快地拨出文件(尽管时间可变),但是在文件本身达到其最终大小后,它通常会花费大量时间进行空闲/工作。我不确定它在做什么,或者为什么它只对某些相同内容的运行起作用,但是最终它完成了,脚本完成了,我收到了finish()信号。如果文件大小有一段时间没有更改,我可能不得不放置一个更详细的进度条,该进度条会切换为忙碌等待,但毕竟Qt似乎可以按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.