我有一个运行的QThread,但通常需要被杀死,然后重新创建。问题是我得到一个无法追踪的TypeError弹出,我不知道是什么导致它。我认为我没有正确地退出线程或正确地破坏它或者有些愚蠢,但我只是不知道是什么导致它。这是一些代码片段:
以下是代码:
class getHistory(QThread):
def __init__(self):
QThread.__init__(self)
self.killSwitch = 0
def kill(self):
self.killSwitch = 1
self.wait()
def run(self):
try:
for x in theloop:
hist = QTreeWidgetItem()
hist.data = dataStuff
self.emit(SIGNAL('histItem'), hist)
if self.killSwitch == 1: break
except: pass
self.emit(SIGNAL('string'), 'done')
return
class Main(QtGui.QMainWindow):
def __init__(self, args):
QtGui.QMainWindow.__init__(self)
self.runTheThread()
def doFunction(self, string):
if not string == 'done':
doThreadStuff
else:
doFinishedThreadStuff
def runTheThread(self):
self.theThread= getHistory()
self.connect(self.theThread, QtCore.SIGNAL("string"), self.doFunction)
self.theThread.start()
然后在循环之前尝试杀死它,我用 self.theThread.kill()
杀死了线程杀死线程的所有正确的事情似乎都在发生,除非,如果线程被杀死并重新启动得足够快,我将得到一个无法追踪的错误:
TypeError:doFunction()只需要2个参数(给定1个)
另外,在一个稍微相关的说明中,通过发出由 doFunction 拾取的“完成”之类的字符串来检查线程是否完成是明智/智能/正确的,或者是有更好的方法吗?
由于doFunction是Qt应用程序的一部分,因此两个参数是self,string。代码一直有效,直到它被垃圾邮件发送,真的,只有这样才会出现错误。
提前致谢。
答案 0 :(得分:2)