我以为我已经在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()
工人类看起来像这样:
class Worker(QtCore.QObject):
(some signals)
def doWork(self):
print "doing my work"
问题是我的doWork插槽永远不会被执行,尽管线程正在运行。
创建MyClass实例后,让我们说: obj = MyClass()
我可以致电: obj.thread.isRunning()
返回True。
我认为信号已经开始'没有发出,因为立即退出创建线程的方法(当我在启动线程后添加睡眠时,它进入doWork槽)。我想知道如何妥善处理这种情况。
如果我没有清楚地解释我的问题,请告诉我。 提前谢谢大家的帮助。
答案 0 :(得分:4)
MyClass
构造函数返回后,您的worker正在进行垃圾回收。让worker
成为MyClass
的成员,使其超出构造函数。
self.worker = Worker()