如何在python中中止gech()?
How to abort gech () in python?
我有 3 个活动线程。
其中之一激活其他线程并使用 getch() 检测 ESC 键,如果按下则程序关闭。
当其他两个线程完成操作(未按 ESC)时,它们成功关闭,但第一个线程仍在等待按下 ESC。因此程序仍然是运行.
class tracking():
def __init__(self):
self.tecla = '\x1b' #ESC
self.case = None
def pressed(self, case):
self.case = getch()
def inicio(self): #The Thread in question calls this function
Thread(target=self.pressed(self.case)).start()
while True:
if self.case is not None:
if self.case == self.tecla:
sys.exit()
else:
self.case = None
self.pressed(self.case)
那是因为 getch()
是同步的。有几个选项:
你可以select
等待一个I/O操作(包括键盘),看这里:https://docs.python.org/2/library/select.html
您可以使用一个库,它允许您检测按键,然后循环并等待直到您得到一个。如果您使用 pygame .
这样的东西,这可能会很麻烦
您可以使用 thread.interrupt_main 自行中断线程,请参阅此处:https://docs.python.org/2/library/thread.html#thread.interrupt_main
我有 3 个活动线程。 其中之一激活其他线程并使用 getch() 检测 ESC 键,如果按下则程序关闭。
当其他两个线程完成操作(未按 ESC)时,它们成功关闭,但第一个线程仍在等待按下 ESC。因此程序仍然是运行.
class tracking():
def __init__(self):
self.tecla = '\x1b' #ESC
self.case = None
def pressed(self, case):
self.case = getch()
def inicio(self): #The Thread in question calls this function
Thread(target=self.pressed(self.case)).start()
while True:
if self.case is not None:
if self.case == self.tecla:
sys.exit()
else:
self.case = None
self.pressed(self.case)
那是因为 getch()
是同步的。有几个选项:
你可以
select
等待一个I/O操作(包括键盘),看这里:https://docs.python.org/2/library/select.html您可以使用一个库,它允许您检测按键,然后循环并等待直到您得到一个。如果您使用 pygame .
这样的东西,这可能会很麻烦
您可以使用 thread.interrupt_main 自行中断线程,请参阅此处:https://docs.python.org/2/library/thread.html#thread.interrupt_main