使用GUI重新启动QThread

马蒂娜·W

我正在使用QThread在单独的线程中进行一些计算。单击按钮即可启动线程获取,然后启动功能StartMeasurement()。线程可以自己完成该过程(完成计算后),并发出完成的PyQT信号。或者,用户可以通过单击stopBtn来停止线程。

Terminate()函数正在运行,但是当我尝试再次启动线程时遇到了很多麻烦。

是否建议在这里使用movetoThread()方法?或者如何确保线程正确停止以启用正确的重启。(意味着,开始新的!)

在线程中开始测量:StartMeasurement()

def StartMeasurement(self):            

    self.thread = measure.CMeasurementThread(self.osziObj, self.genObj, self.measSetup)

    self.thread.newSample.connect(self.plotNewSample)
    self.thread.finished.connect(self.Done)
    self.stopBtn.clicked.connect(self.thread.terminate)
    self.stopBtn.clicked.connect(self.Stop)

    self.thread.start()
拉巴列克桑达尔

这不是一个问题。使用时的一般做法QThread是将其finished()信号连接deleteLater()通过移至单独线程的对象插槽moveToThread()这样做是为了在您随后销毁线程时正确管理内存,因为假定您先退出线程然后销毁其实例。;)这应该告诉您,除非您已经建立了我上面描述的连接,否则停止线程与破坏那些对象无关。

如果您已正确使用某个线程停止了线程的运行,那么重新启动线程是一个很好的选择quit()wait()而实际上要等到停止完成为止

但是,我的建议是不要这样做,除非该额外的线程由于某种原因对您的应用程序产生了巨大的影响(对于现代机器而言,这种可能性很小)。

不要重新启动线程,请考虑以下选项:

  • 实现一个pause标志,如果将其设置为,它只会使线程不执行任何操作true(我已经多次使用我的这个示例来演示这种行为(特别是检查worker.cppdoWork()函数))-它在C ++中,但是可以移植到PyQt立刻)
  • use-QRunnable它的目的是运行某些程序,然后(除非autoDelete设置为true)返回线程池。如果您有不时执行的任务并且不需要恒定地运行单独的线程,那将非常好。如果要使用信号和时隙(要获得内部的计算结果,QRunnable::run()则必须先从中继承QObject,然后从QRunnable
  • 使用期货(检查Qt并发模块)

我建议您首先阅读Qt提供的各种线程技术示例用例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章