【问题标题】:How often is the keyboard polled for the Form.KeyDown event?键盘多久轮询一次 Form.KeyDown 事件?
【发布时间】:2011-07-11 13:09:45
【问题描述】:

我正在以每秒 45 帧的速度运行一个程序。这是一个游戏,所以及时的用户输入很重要。似乎 keydown 事件有时会执行......缓慢?好像轮询间隔有时会变化多达 3 或 4 秒。我绝对确定实际游戏没有滞后,而是输入滞后。 我计划转移到 GetKeyState(),但我仍然想知道 KeyDown 事件的实际轮询频率。

编辑:我想我会发布一个链接,指向我正在使用的解决方法here

【问题讨论】:

    标签: c# .net events keyboard


    【解决方案1】:

    没有轮询频率 - Windows 使用消息传递系统将按键(和其他事件通知)传递给应用程序。

    物理按键触发中断,进入操作系统,最终向您的程序发送消息。

    您看到的延迟可能是因为事件队列是 Windows 中的共享服务(即 Windows 在系统负载发生后不久发送消息)。 3-4 秒是一个 很多 的延迟,不过 -- 我不确定是什么原因造成的。

    更多信息请参见this article

    【讨论】:

    • +1。 @Bloodyaugust 遇到的延迟可能是因为游戏没有正确处理消息。
    • @Ken:您能否解释一下它可能无法正确处理消息的原因? .Net 不是在幕后处理所有消息处理吗?
    • 即使负载相对较低,它也会延迟通过所述队列是否很常见?
    • @Bloodyaugust:我没有任何消息来源,但我想说 3-4 秒确实是非常可怕的延迟——我曾经使用 Windows 消息在线程之间进行通信,并且延迟并不明显,即使在负载很重的系统上。我不确定你的延迟是由什么引起的......
    • @Cameron:可能是因为我每秒调用 Application.DoEvents() 45 次?哦等等,那应该可以解决它...>_
    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2012-05-10
    • 2018-02-26
    • 1970-01-01
    相关资源
    最近更新 更多