【发布时间】:2014-07-07 12:43:41
【问题描述】:
在我继承 wx.Panel 的类中,我有这个方法:
def KeyEventProcedure(self):
while True:
z = msvcrt.getch()
if ord(z) == 27:
self.OutputText("Stopping.")
self.program_stopped = True
print "IT'S WORKIIIIING"
在我的 PanelClass 的 __init__ 方法中,我有这个:
self.program_stopped = False
keyThread = Thread(target = self.KeyEventProcedure)
#keyThread.setDaemon(1) //I tried with and without this call, makes no difference
keyThread.start()
在我的应用程序的许多地方我都有这个检查:
if self.program_stopped == True:
self.program_stopped = False
return
我知道我可以在KeyEventProcedure 方法中退出整个应用程序,但我不想退出应用程序,我只想将当前正在执行的函数转到return。但是,当我启动应用程序时,无论按多少次ESC,它都不会打印,并且当前正在执行的操作也不会返回。
【问题讨论】:
-
开始故障排除。
getch会被调用吗?它回来了吗?它返回什么? -
@DavidSchwartz 它只通过
KeyEventProcedure一次,即使它是while True:,它似乎也没有崩溃或任何东西......而且我不会在任何地方过早地杀死线程跨度> -
它做的最后一件事是什么?它会调用
getch而不返回吗? -
程序启动时,
KeyEventProcedure运行一次,它命中的最后一个断点在z = msvcrt.getch(),然后函数突然退出,但没有打印错误。 -
尝试将其放入:
while True: try: z = msvcrt.getch() if ord(z) == 27: self.OutputText("Stopping.") self.program_stopped = True print "IT'S WORKIIIIING" except: print sys.exc_info()无济于事
标签: python multithreading wxpython