PySide - QThread运行但未进入连接到信号“started”的插槽
我以为我对Qt中的线程已经了解得很透彻了,但显然我理解错了。我在这方面卡了很久,所以非常希望能得到大家的帮助。
我创建了一个类,在它的__init__方法里启动了一个线程:
class MyClass(object):
def __init__(self):
(...)
self.thread = QtCore.QThread(parent)
worker = Worker()
QtCore.QObject.connect(self.thread, QtCore.SIGNAL('started()'), worker,
QtCore.SLOT('doWork()'))
QtCore.QObject.connect(worker, QtCore.SIGNAL('finished()'), self.thread,
QtCore.SLOT('quit()'))
QtCore.QObject.connect(worker, QtCore.SIGNAL('finished()'), worker,
QtCore.SLOT('deleteLater()'))
QtCore.QObject.connect(self.thread, QtCore.SIGNAL('finished()'),
self.thread, QtCore.SLOT('deleteLater()'))
worker.moveToThread(self.thread)
self.thread.start()
这个Worker类看起来是这样的:
class Worker(QtCore.QObject):
(some signals)
def doWork(self):
print "doing my work"
问题是我的doWork槽(也就是处理工作的地方)从来没有被执行,尽管线程是正在运行的。
在创建MyClass的实例后,比如说:
obj = MyClass()
我可以调用:
obj.thread.isRunning()
这会返回True,说明线程确实在运行。
我猜测是因为线程创建的方法很快就结束了,所以没有发出'started'信号(当我在启动线程后加上睡眠时间,doWork槽就会被执行)。我想知道这种情况应该怎么正确处理。
如果我没有清楚地解释我的问题,请告诉我。非常感谢大家的提前帮助。
1 个回答
5
你的工作线程在 MyClass
的构造函数返回后被垃圾回收了。把 worker
变成 MyClass
的一个成员,这样它就能在构造函数结束后继续存在。
self.worker = Worker()