我为一个键盘记录器创建了一个线程,它与另一个产生一些声音的线程并行记录(我想捕捉反应时间)。在
不幸的是,尽管我调用了killKey()并打印了“invoked killKey()”,但线程始终没有完成。在
我总是得到一个线程激活()=来自此线程。在
class KeyHandler(threading.Thread):
hm = pyHook.HookManager()
def __init__(self):
threading.Thread.__init__(self)
def OnkeyboardCharEvent(self,event):
print 'Key:', event.Key
if event.Key=='E':
...
return True
def killKey(self):
KeyHandler.hm.UnhookKeyboard()
ctypes.windll.user32.PostQuitMessage(0)
print "invoked killkey()"
def run(self):
print "keyHandlerstartetrunning"
KeyHandler.hm.KeyDown = self.OnKeyboardCharEvent
KeyHandler.hm.HookKeyboard()
#print "keyboardhooked"
pythoncom.PumpMessages()
更准确地说, ctypes.windll.user32.PostQuitMessage(0)不执行任何操作
我希望使用外部超时分别调用killKey()ctypes.windll.user32.PostQuitMessage(0)在此线程中。在
我想pbackup的解决方案很好。最后,我找到了一个解决方案,只需自己发送一个密钥,而不是等待用户输入。它不是最好的,但却是最快的,在我的计时线程与其他计时例程并行。在
PostQuitMessage必须从同一个线程发布。为此,您需要引入一个全局变量
STOP_KEY_HANDLER
。如果您想退出,那么只要从您想要的任何线程中设置globalSTOP_KEY_HANDLER = True
,它将在下一次击键时退出。你的密钥处理程序必须在主线程上运行。在相关问题 更多 >
编程相关推荐