Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Qt中屏幕绘制和键盘按键事件的精确延迟

Qt中屏幕绘制和键盘按键事件的精确延迟
EN

Stack Overflow用户
提问于 2014-06-10 04:46:47
回答 2查看 1.1K关注 0票数 2

我正在从事一个Qt项目,在这个项目中,某些事件发生的确切时间是最重要的。具体来说:我有一个非常简单的动画,必须在特定时间绘制到屏幕上,比如t1。一旦我发布QWidget更新来启动动画,它将花费一小段时间dt (取决于屏幕刷新速率等)。在屏幕上显示更新。我需要测量这个额外的时间,我不知道该怎么做。

我曾想过在QTime事件的QWidget中使用QWidgetQElapsedTimer对象,但我不确定这是否能实现我的目标。

类似地,当用户按下一个键时,它将在基于键盘的轮询率的一个小延迟之后被注册。我也需要解释一下这次延误的原因。如果我能得到投票率,我知道平均会有多少延迟。

EN

回答 2

Stack Overflow用户

发布于 2014-06-10 06:45:15

你想要的是--从定义上来说--不可能在电脑里实现。

如果没有传感器固定在显示器上,并与计算机也可以访问的原子钟同步,那么如何才能知道屏幕上什么时候出现了像素?:-)

Qt的可能性更大,因为它通常被用作Win/OSX/Linux之上的抽象层。这些根本就不是任何形式的实时操作系统

你所能知道的只有当你要求发生什么事。然后,您可以确定您需要多长时间才能重新控制发出另一个请求。通过这样做,您可以对基本的“帧速率”吞吐量设置一些期望,但是有无数的因素可能导致性能在任何时候都有很大的差异。

如果您能够深入到内核/驱动程序级别,您可以找到一个更接近于金属测量的实际效果何时到达硬件。但这不是Qt的领域,仍然没有告诉你什么时候效应在外部世界显现的“实际”答案。

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

你可能会从与搜索术语“高分辨率定时器”相关的东西中得到一些刺激。

票数 0
EN

Stack Overflow用户

发布于 2014-06-10 18:36:36

我曾想过在QTime事件的QWidget中使用QWidgetQElapsedTimer对象,但我不确定这是否能实现我的目标。

事实上,这是唯一的方法,也是你能做的所有事情。如果不使用实时操作系统、自定义驱动程序或外部硬件,就无法再做任何事情了。

您可能不需要这两种方法--测量自上次更新以来所经过的时间的QElapsedTimer就足够了。

请注意,当事件循环为空时,在没有抢占进程的前提下,调用widget.update()和执行paintEvent之间的延迟在微秒以下。

这是一些研究的反应时间实验。给出了用户通过键盘或鼠标响应的视觉输入。为了准确地找到反应时间,我需要知道什么时候屏幕上出现了刺激,什么时候按了键。

从本质上说,只有一种方法可以在不使用实时操作系统或自定义驱动程序的情况下正确地完成它,并且有很多错误的方法。那么,正确的方法是什么?

屏幕的一小部分需要改变颜色或亮度,与视觉刺激的呈现巧合。您可以将光纤连接到屏幕上,并将其传送到连接到外部事件计时器的接收器中。键盘中的联系人闭包也提供给相同的事件计时器。这使您可以精确地计时响应的延迟时间,而不考虑操作系统延迟、线程抢占等。如果您愿意做更多的开发工作,事件计时器可以像阿杜伊诺一样便宜。

如果你重复显示刺激,并且在刺激演示之间需要一个特定的时间,你只需经常重复演示,并收集数据中的响应延迟和刺激到刺激的时间。然后,您可以丢弃超出预期公差的演示文稿。

这种方法与屏幕无关,您甚至可以在移动设备上使用它,只要它可以与您的计时器硬件进行某种程度的接口。定时器硬件当然可以联网,使接口容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24141378

复制
相关文章
Python学习笔记:第2天while循
while循环是先判断给的条件是否为真,如果真则执行循环体中的while语句,否则跳出循环;执行循环体之后再次判断条件是否为真。
py3study
2020/01/19
4960
2、while+read按行读取文件
一、三种方法 1.exec读取文件 exec <file sum=0 while read line do cmd done 2. cat读取文件 cat file|while read line do cmd done 推荐用途: 通过awk等三剑客获取文件中的数据后,可以使用这种方法用管道抛给while按行读取 3. while循环最后加重定向 while read line do cmd done<file 推荐用途: 直接按行读取文件中的内容时,推荐用此方法 二、案例 读取web日志文件
jackxiao
2021/11/16
1.7K0
pyspark之从HDFS上读取文件、从本地读取文件
hdfs上的路径: path="hdfs:///主机名:端口号/地址" 本地上的路径: path"file:///本地地址" 读取文件: rdd=sc.textFile(path)
西西嘛呦
2020/08/26
5.2K0
OpenGl 导入读取多个3D模型 并且添加鼠标控制移动旋转
  因为接下来的项目需求是要读取多个3D模型,并且移动拼接,那么我就先把基本的小demo给写好当做前期测试。
徐飞机
2019/10/08
3.2K0
OpenGl 导入读取多个3D模型 并且添加鼠标控制移动旋转
python从txt文件读取数据
  (作为一个python初学者,记录一点学习期间的笔记,方便日后查阅,若有错误或者更加便捷的方法,望指出!)
py3study
2020/01/19
4K0
python从txt文件读取数据
OpenGl读取导入3D模型并且添加鼠标移动旋转显示
原文链接:https://www.cnblogs.com/DOMLX/p/11543828.html
徐飞机
2019/09/19
2.7K0
OpenGl读取导入3D模型并且添加鼠标移动旋转显示
Rust:从嵌套循环中退出
在C语言中,我们常用goto语句来在错误条件下跳转到函数的数据清理部分。这种用法的好处尤其体现在“错误发生在嵌套循环”的时候,我们不用每一层循环都加一个标志位,逐级退出。
灯珑LoGin
2022/11/16
1.5K0
sl从程序集中读取xaml文件
 StreamResourceInfo sri = Application.GetResourceStream(new Uri("HowTo;component/Page.xaml", UriKind.Relative)); StreamReader sr = new StreamReader(sri.Stream); txtReadxml.Text = sr.ReadToEnd(); {1};component/{2} 1为程序集的名字 2为想读取的页面 page.xaml: <UserCont
用户1172164
2018/01/16
1.1K0
sl从程序集中读取xaml文件
Python Numpy 从文件中读取数据
测试文件内容(test1.txt) hello,123,nihao 8,9,10 io,he,no 测试代码 import numpy # dtype:默认读取数据类型,delimiter:分隔符 world_alcohol = numpy.genfromtxt("test1.txt", dtype=str, delimiter=",") # 数据结构 print(type(world_alcohol)) # 数据内容 print(world_alcohol) # 帮助文档 print(help(nump
山海散人
2021/03/03
4.4K0
调用opengl程序代码
// Test_of_callexe.cpp : Defines the entry point for the console application. // #include<stdafx.h> #include <windows.h> #include <stdio.h> #include <conio.h> int main(int argc, char * argv[]) { STARTUPINFO si = {0}; si.cb = sizeof(si); P
流川疯
2019/01/18
1.1K0
OpenGl 实现鼠标分别移动多个物体
原文链接:https://www.cnblogs.com/DOMLX/p/11620088.html
徐飞机
2019/10/06
2.7K0
实验5 OpenGL模型视图变换
2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它(物体运动,让人看它的不同部分)。(模型变换)
步行者08
2018/10/09
1.7K0
json文件的读取_c语言文件读取
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。有关于json的相关信息,可参考:json百度百科。
全栈程序员站长
2022/11/07
5.8K0
json文件的读取_c语言文件读取
HDFS——如何从HDFS上读取文件内容
用这个命令bin/Hadoop fs -cat 可以将HDFS上的文件内容读取到控制台。
星哥玩云
2022/06/30
2.8K0
Android OpenGL 渲染图像读取哪家强?
glReadPixels 是 OpenGL ES 的 API ,OpenGL ES 2.0 和 3.0 均支持。使用非常方便,下面一行代码即可搞定,但是效率很低。
字节流动
2020/11/03
4.5K0
matlab读取mnist数据集(c语言从文件中读取数据)
mnist database(手写字符识别) 的数据集下载地:http://yann.lecun.com/exdb/mnist/。
全栈程序员站长
2022/08/01
5.1K0
matlab读取mnist数据集(c语言从文件中读取数据)
C++ 从文件读取python numpy 数组
作为示例,我们先在python中创建一个二维的numpy数组, 并写入二进制文件:
用户6021899
2020/02/26
5.8K0
C++ 从文件读取python numpy 数组
OpenGL的glPushMatrix()和glPopMatrix()矩阵栈顶操作函数详解「建议收藏」
OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作的。opengl中的变换一般包括视图变换、模型变换、投影变换等,在每次变换后,opengl将会呈现一种新的状态(这也就是我们为什么会成其为状态机)。
全栈程序员站长
2022/07/23
1.5K0
OpenGL的glPushMatrix()和glPopMatrix()矩阵栈顶操作函数详解「建议收藏」
点击加载更多

相似问题

读取fread() while循环中的文件

11

opengl+glut glutPostRedisplay在哪里?

30

Python在while循环中读取文件

33

Scala在while循环中从文件中写入和读取

11

glutPostRedisplay()并不总是被调用?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档