c# - .NET : How to get time for keypress as precisely as possible?

标签 c# xna keyboard keyboard-events low-latency

我正在尝试构建一个通常不需要 super 性能的应用程序,除了键盘按下(或外部 Controller 按钮按下)的时间戳。我希望时间戳尽可能精确,最好低至 +/- 5 毫秒。这是为了科学应用。以最小的延迟实现这一目标的最佳编程范例是什么?以下哪项更可取?

(a) 创建一个以更高优先级运行的工作线程,并循环查看是否按下了某个键。使用 Sleep(x),其中 x 小于 5。

(b) 创建一个键盘钩子(Hook),它有一个异步回调。

(c) 另一种选择。

除了答案之外,任何代码(或示例链接)都将不胜感激,因为我是一个相当新的开发人员。

编辑:命名法。应该更加小心。时间戳是指一般时间,不一定是完整的日月年时分秒毫秒。我从一开始就计划使用 StopWatch 类,因为我需要的只是程序中事件开始与按下按钮时间之间的时间。抱歉,如果不清楚。

最佳答案

来自评论:

I am looking for the difference between the start of an event and the key press.

重要的是要了解这与尝试获取按键的实际时间戳非常不同。

这种情况正是 Stopwatch 的用途。是的,使用它并庆幸你并不是真的在尝试获取时间戳。

只需在事件开始时使用 Stopwatch.StartNew,并在按键事件上使用 Stopwatch.Stop。事件处理程序触发有轻微的延迟,但与其他任何东西相比这将是微不足道的 - 如果它在这里给您带来任何问题,我会感到惊讶。

关于c# - .NET : How to get time for keypress as precisely as possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28022582/

相关文章:

c# - 启用双重转义是否危险?

c# - 无法从 Task.FromAsync 方法中的组中选择方法

unit-testing - XNA 单元测试

c# - 支持和反对使用 Java/C#(包括 XNA)/Unity 开发游戏的原因是什么?

c# - 在 XNA 中重用游戏对象是否有意义?

java - 使用 KeyboardFocusManager

c# - 开发像 Windows 10 Setting App 这样的 WPF App

ios - 为 iOS 8 中的新语言自定义键盘系统范围

macos - 在 OSX 中捕获媒体键(播放/暂停)

c# - float 比双倍慢吗? 64位程序运行速度比32位程序快吗?