如何测量 C++ 中的高分辨率按键时间?

How to measure high-resolution keypress time in C++?

我有一个采样率为 1 000 Hz 的 Millikey Response Box 和一个采样率为 10 000 Hz 的光传感器。我想测量从按下按钮的那一刻到由我的 C++ 程序中的按钮按下触发的屏幕变化的端到端响应时间。我正在努力了解如何去做。

我的想法是,理想情况下,我会让按钮按下创建一个按键事件,该事件包含以 1000 Hz 采样率创建时的时间戳。我的 C++ 程序将通过记录高频时间戳并触发屏幕上的亮度变化,以自己的频率处理此事件。接下来,光传感器将拾取变化并以 10000 Hz 的采样率生成自己的按键事件。在下一个周期,我的 C++ 程序将拾取此事件并通过比较两个高分辨率时间戳来获取实际的端到端时间。

这个想法合理吗?如果是,我该如何实施?

到目前为止,我使用 GLFW 来捕获键盘事件并在按键回调中获取时间戳,但据我所知,这并不是按键被按下的确切时间。

尝试使用计算机和外围设备完成所有这些操作很可能无济于事,因为链的各个部分存在未知且可能不稳定的延迟。

所以这是我成功用于测量延迟的技巧。我将光传感器连接到声音发生器。然后我记录了按钮被击中的声音以及来自传感器的声音。以 96Khz 记录,这将为您提供非常准确和精确的读数。您只需测量音频编辑器中的延迟,或者我想您也可以有一个独立的程序来分析音频。

我的答案是使用 LabStreamingLayer. I use App-Input to capture keyboard events, LabRecorder to capture the stream of these events, and then Python importer to parse the resulting XDF 文件。当按键触发由光传感器检测到的我的 C++ 程序中的屏幕变化时,以上所有在后台运行并捕获事件。

我确信其他答案和评论会为人们何时想要自己在低级别上实现这一点提供很好的建议。由于我的理解有限,我的问题也没有细化,所以还是感谢您的贡献!