我总是想知道,当我按下键盘上的一个键时,Windows将其视为KEY_DOWN事件,然后我的程序可以询问Windows是否有这样的事件,并且窗口将会回答。
但是,确切地说,这个事件能持续多久?我的意思是,在现实世界中我们不会担心这一点,因为我们的处理器每秒可以处理许多操作,比我们点击的速度快得多,但是如果我能以光速点击怎么办?
那么,KEY_DOWN究竟是如何定时的?
答案 0 :(得分:3)
输入事件(如按键)是缓冲。当Windows从键盘驱动程序接收通知时,它会将事件存储在消息队列中。这是拥有前台窗口的线程所拥有的。无论你的程序需要多长时间,都会坐在那里。它需要调用GetMessage()或PeekMessage()。
这需要多长时间完全不可预测,这取决于程序的UI线程的响应程度。或者换句话说,它调度收到的消息的速度有多快,并再次调用GetMessage()来检索下一个消息。一段时间内处于昏迷状态的UI线程并不罕见。即使在快速处理器上,执行dbase查询的程序写得很差,该查询返回数千行并等待其结果也很常见。
缓冲确保这不会导致问题。无论用户输入的速度有多快,他的击键都不会丢失。