c++ - Qt中屏幕绘制和键盘按键事件的精确延时

  显示原文与译文双语对照的内容
0 0

我正在做一个Qt项目,其中某些事件发生的确切时间是最重要的。 具体来说:我有一个非常简单的动画,必须在特定时间绘制到屏幕上说 t1. 一旦我发布了 QWidget 更新以启动动画,它将花一点时间在屏幕上显示更新。 我需要测量这个额外的时间。 我不确定该怎么做。

我想在 QWidget的paint事件中使用 QTimeQElapsedTimer 对象,但我不确定这是否能达到我的目标。

类似地,当用户按键时,它会根据键盘的轮询速率在小延迟后注册。 我还需要考虑这个延迟。 如果我能得到平均的轮询率,我知道平均延迟是多少。

时间: 原作者:

0 0

你在计算机中可能需要 is--by definition--not的内容。

如何能够知道屏幕上的像素"实际显示出来",没有传感器粘贴到监视器上,同步到原子钟。 :- )

由于它通常在 Win/OSX/Linux. 上被用作抽象层,而不是任何类型的实时操作系统,所以它甚至比Qt更进一步堆积。

你能知道的就是当你要求。 然后,你可以花多长时间来返回控制来进行另一个请求。 通过这种方式,你可以对基本"帧速率"吞吐量进行一些预期,但是在任何时刻都会有很多因素。

如果你可以探索到内核/驱动程序级别,你可以找到实际效果到硬件时的closer-to-the-metal度量。 但这并不是qt的领域,而且还没有告诉你在外界的效果中的"实际"答案。

你要从Qt中得到的最好的是一个周期的QTimer 。 它可以在( 大致) 毫秒分辨率下进行回调。 如果这还不够好。 你需要一个更小的船。 :- )

你可能会从与搜索术语 "高分辨率计时器"相关的内容中得到一些提升:

原作者:
0 0

我想在 QWidget的paint事件中使用 QTimeQElapsedTimer 对象,但我不确定这是否能达到我的目标。

实际上,这是唯一能做到的方法,而且只能做到这一点。 没有进一步可以完成,没有利用实时操作系统。自定义驱动程序或者外部硬件。

你可能不需要- QElapsedTimer 测量自上次更新后经过的时间。

请注意,当事件循环为空时,widget.update() 调用和执行的paintEvent 之间的延迟在微秒之内。

对一些研究的React时间实验。 用户通过键盘或者鼠标响应的可视输入。 为了能够准确地找到React时间,我需要知道什么时候显示在屏幕上,什么时候按键。

实际上只有一种方法可以使用实时操作系统或者自定义驱动程序,以及完全不同的方法。 那么什么是正确的方法?

屏幕的小区域需要随着视觉刺激的表示而变化颜色或者亮度。 将光纤附加到屏幕上,并将它的输入到附加到外部事件计时器to的接收器中。 键盘中的联系人关闭也被提供给相同的事件计时器。 如果愿意,你可以精确地时间响应响应延迟,而不考虑操作系统延迟,线程抢占,事件计时器,如果你愿意做更多的开发工作,那么就可以这样做。

在刺激演示中反复显示刺激并需要一定时间间隔,只需经常重复演示,同时收集数据的响应延迟和stimulus-to-stimulus时间。 然后你可以丢弃超出所需公差的演示文稿。

这种方法是不可知的,你可以在移动设备上使用它,只要它能以某种方式与你的定时器硬件接口。 定时器硬件当然可以联网,使得接口更加容易。

原作者:
...