【发布时间】:2014-05-12 02:50:26
【问题描述】:
我正在学习 C/C++,我最近创建了一个键盘记录器,主要是因为它是一个简单的学习项目。所以我要做的是在循环中运行GetAsynKeyState() 来检查密钥的状态。当我检查 CPU 时,它的周期会飙升,因为很好;我一直在运行一个带有条件的循环。
在我看来做这种事情很浪费,我敢肯定更大更高级的软件不会使用这种技术。
问题:当按键被按下时,内核会创建一个中断来处理。我的程序可以像内核一样被“唤醒”,还是唯一的解决方案是不断检查按键?专业应用程序会做什么?
此外,编程语言实现了事件侦听器,它们如何实现这一点,轮询或其他一些魔法?
【问题讨论】:
-
哪个操作系统?我假设这是 Windows。
-
当您使用
GetAsyncKeyState进行投票时,您是否在两次检查之间睡觉? -
@minitech 是的,我让它睡着了。我的问题仍然是关于应用程序将使用的程序类型,因为在我看来,持续循环有点疯狂,你不觉得吗?
-
根据我的经验,在那里稍作睡眠将 CPU 使用率降低到几乎为零。无论如何,钩子会给你一个基于事件的解决方案。
-
@boompow,有很多信息:msdn.microsoft.com/en-us/library/windows/desktop/… 低级键盘挂钩是最容易开始使用键盘输入的全局类型,因为它不需要 DLL。