我制作了一个程序,每次按下某个键组合时都会启动一个短脚本。 我正在使用以下列方式使用pyHook的线程:
def logic():
global running
hm = HookManager()
hm.KeyDown = captureF
hm.HookKeyboard()
while(running):
pythoncom.PumpWaitingMessages()
return
其中captureF
是一个函数,用于测试是否按下了某个组合键,然后按下了如何启动脚本。
在主线程上我正在运行一个包含选项和退出的Windows托盘gui(在按下退出时将标志running
设置为false,导致逻辑线程完成)。
我现在面临的问题是程序启动时CPU使用率一直很高(即使脚本没有启动),我想问题是我测试键盘输入的方式,但我是不知道如何以更有效的方式做到这一点。
感谢您的帮助。
答案 0 :(得分:1)
问题是您的轮询占用CPU:Semaphore sem=new Sempahore(1);
sem.aquire(); // Thread will aquire permit, another thread will wait
//this will be synchronized block
sem.release(); allows another thread to aquire permit
检查消息并在没有消息时立即返回(它是非阻塞的)
你必须插入某种延迟。最简单的是:
PumpWaitingMessages
1/100秒确保良好的反应性并为CPU提供喘息空间。我会让你调整价值。设置值越高,轮询的反应越少。
但是,如果您不需要对循环进行任何控制,您也可以使用阻止import time
while(running):
pythoncom.PumpWaitingMessages()
time.sleep(0.01)
调用,而不需要循环。