我的程序中有这段代码。其中 OnDone 函数是 wxPython GUI 中的一个事件。当我单击“完成”按钮时,将触发 OnDone 事件,然后执行一些功能并启动线程 self.tstart - 目标函数为 StartEnable。我想使用 self.tStart.join() 加入这个线程。但是我收到如下错误:
Exception in thread StartEnablingThread:
Traceback (most recent call last):
File "C:\Python27\lib\threading.py", line 801, in __bootstrap_inner
self.run()
File "C:\Python27\lib\threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "//wagnernt.wagnerspraytech.com/users$/kundemj/windows/my documents/Production GUI/Trial python Codes/GUI_withClass.py", line 638, in StartEnable
self.tStart.join()
File "C:\Python27\lib\threading.py", line 931, in join
raise RuntimeError("cannot join current thread")
RuntimeError: cannot join current thread
我以前没有遇到过这种类型的错误。你们中的任何一个人都可以告诉我我在这里缺少什么。
def OnDone(self, event):
self.WriteToController([0x04],'GuiMsgIn')
self.status_text.SetLabel('PRESSURE CALIBRATION DONE \n DUMP PRESSURE')
self.led1.SetBackgroundColour('GREY')
self.add_pressure.Disable()
self.tStart = threading.Thread(target=self.StartEnable, name = "StartEnablingThread", args=())
self.tStart.start()
def StartEnable(self):
while True:
time.sleep(0.5)
if int(self.pressure_text_control.GetValue()) < 50:
print "HELLO"
self.start.Enable()
self.tStart.join()
print "hello2"
break
我想在“if”条件执行后加入线程。直到他们我希望线程运行。
原文由 Jesh Kundem 发布,翻译遵循 CC BY-SA 4.0 许可协议
等待加入
加入 一个线程实际上意味着等待另一个线程完成。
所以,在
thread1
中,可以有这样的代码:这意味着 “在
thread2
完成之前不要执行下一行代码” 。如果您执行了(在
thread1
中)以下操作,则会因问题错误而失败:加入不会停止
调用
thread2.join()
不会导致thread2
停止,甚至不会以任何方式向它发出停止信号。线程在其目标函数退出时停止。通常,一个线程被实现为一个循环,它检查一个告诉它停止的信号(一个变量),例如
然后,停止线程的方法是:
问题代码
该代码已经使用
break
正确实现了停止。join
应该被删除。