所以基本上我有一个类,比如说SerialClass,它创建一个本地线程来更新组合框,构造函数看起来像这样:
def __init__(self, master):
...
# Local thread.
self.__thread = threading.Thread(target=self.__thread_handler)
self.__thread_finished = False
self.__thread.start()
这是线程执行的函数,它只是用值更新组合框。
def __thread_handler(self):
while not self.__thread_finished:
# Update the ports continously.
self.update_ports()
...
这是我用来退出线程的函数:
def thread_exit(self):
self.__thread_finished = True
self.__thread.join()
另一个类,比方说App,实例化类SerialClass。 App创建一个Tk对象并使用此方法启动主应用程序:
def run(self):
# Handle the close window event.
self.__root.protocol("WM_DELETE_WINDOW", self.__on_close)
# Start the application and wait for user events.
self.__root.mainloop()
这是on_close方法:
def __on_close(self):
# When the application finishes, handle the rest of the threads.
self.__serialui.thread_exit()
# Destroy the root window as expected.
self.__root.destroy()
我遇到的问题是程序流永远不会到达root.destroy()函数,由于某种原因,当我调用thread_exit函数时,主线程永远被阻塞。如果我在thread_handler函数中注释self.update_ports(),则所有进程都会正常关闭。
有什么想法吗?