我有一个用Python编写的应用程序,使用Tkinter。其中一个功能允许打开串行端口,之后通过串行端口接收的任何消息都显示在文本窗口中。这很好用。当我关闭窗口时,问题就来了,这不会杀死监视串口的线程。然后必须手动杀死(或者,拔掉USB串行电缆会导致异常,从而导致进程终止)。
我假设我在这里遗漏了一些简单的东西,但是我认为关闭应用程序会关闭所有相关的线程。我似乎无法在文档中找到任何相关内容,但我可能在错误的地方找到了什么?
串口线程的代码,如果它是相关的:
class SerialThread(threading.Thread):
def __init__(self, queue, sp):
threading.Thread.__init__(self)
self.queue = queue
self.ser_handle = sp;
def run(self):
while True:
if self.ser_handle.inWaiting():
text = self.ser_handle.readline(self.ser_handle.inWaiting())
self.queue.put(text)
time.sleep(0.2)
答案 0 :(得分:2)
您必须有办法让线程停止,您可以使用threading.Event
来完成此操作。
class SerialThread(threading.Thread):
def __init__(self, queue, sp):
threading.Thread.__init__(self)
self.queue = queue
self.event = threading.Event() # An event object.
self.ser_handle = sp;
def stop(self):
self.event.set()
def run(self):
while not self.event.isSet():
if self.ser_handle.inWaiting():
text = self.ser_handle.readline(self.ser_handle.inWaiting())
self.queue.put(text)
time.sleep(0.2)
然后在窗口的关闭事件中,请致电your_thread.stop()