【发布时间】:2012-09-21 10:00:36
【问题描述】:
我正在使用一个简单的循环来捕获用户按键;
while (1)
{
for(i = 8; i <= 190; i++)
{
if (GetAsyncKeyState(i) == -32767){
//Do stuff
}
}
}
当用户按下某个键时,它会“做事”,但很明显,因为它无限循环,而且我是 C++ 新手,它占用了 100% 的 CPU,这不适合简单的输入。
我做错了什么?我已经尝试过 Sleep() 函数(如果我把它放在“for 循环”中,它会错过按键,如果我把它放在“while 循环”中,它根本不会降低 CPU,afaik)
我怎样才能让它捕捉到相同的按键,但使用的 CPU 几乎没有那么多;我错过了一个技巧吗?我敢肯定大多数程序都能捕捉按键,但您不会看到所有的按键都 100% 使用!
非常感谢。
【问题讨论】:
-
你不能使用线性算法来做到这一点......你需要在你的程序中添加一个监听器。谷歌那个。
-
使用钩子。
GetMessage将处于空闲状态,直到发生关键事件。对于更脏的解决方案,请在循环中添加Sleep(10);或其他内容。 -
过去我使用了
RegisterHotkey和UnregisterHotkey的组合。但是,我只想在窗口处于焦点时检测按键,所以我在窗口失去焦点时调用UnregisterHotkey,并在窗口重新聚焦时将其注册回来。也许这些功能会对你有所帮助。如果您在窗口失焦时不取消注册热键,可能会弄乱其他应用程序热键。
标签: c++ for-loop while-loop keypress