Skip to content

QThread 莫名其妙退出

之前一个项目需要点击一个按钮后做一些图像处理。由于处理时间很长,所以用了 QThread,即点击按钮后这个 QThread 就会 start,但当时遇到一个问题就是:QThread 总是莫名其妙退出,用 try catch 也抓不到错误。

搞了半天终于弄懂:因为我点击按钮后,这个方法就结束了。即点击按钮后我初始化了一个 QThread 变量,调用其 start 方法之后,就退出了。此时相当于主线程已经退出,在主线程初始化的变量会被回收,那很显然 QThread 就运行不了。

所以最后方法是要始终保持一个 QThread 变量即可:

class Test(...):
  def __init__(self):
      # 需要保持一个变量,否则 on_click 方法结束后,线程变量会被回收
      self.thread = QThread()
      self.button.connect(self.on_click)

  def on_click(self):
      # 获取一些参数
      config = self.get_config()
      # 传入到线程中,其中 prepare 是自己定义的方法
      self.thread.prepare(config)
      # 启动线程
      self.thread.start()

Comments