解决问题:报文发送线程正在运行时,点击右上角的窗口关闭按钮,界面卡死无响应。
原程序代码:
# 窗口关闭事件
self.Bind(wx.EVT_CLOSE, self.exit_sys)
def exit_sys(self, event):
self.Destroy()
sys.exit(1)
原程序代码只是设置了窗口关闭事件,并没有关闭正在运行的报文发送线程。
解决办法:在线程中自定义外部停止线程运行的函数
def setFlag(self): # 外部停止线程的操作函数
self.Flag = False # boolean
重新定义窗口关闭事件响应函数exit_sys()
def close_link(self):
close_state = close_device(self.working_can_device, self.working_can_channel)
if close_state == 1:
self.m_button2.SetLabel("开始")
self.m_button2.Bind(wx.EVT_LEFT_DOWN, self.SendMsg)
self.m_choice1.Enable()
self.m_choice2.Enable()
self.m_textCtrl1.Enable()
else:
mes_info = "断开can通信失败"
toastone = wx.MessageDialog(None, mes_info, "信息提示",
wx.YES_DEFAULT | wx.ICON_QUESTION)
if toastone.ShowModal() == wx.ID_YES: # 如果点击了提示框的确定按钮
toastone.Destroy() # 则关闭提示框
def exit_sys(self, event):
self.working_thread.setFlag()
self.close_link()
self.Destroy()
sys.exit(1)