QT之QElapsedTimer计时

QElapsedTimer QElapsedTimer是Qt框架中提供的一个类,主要用于测量代码执行时间和延迟时间。它可以在不同操作系统上提供准确的计时,并返回毫秒或纳秒级别的时间。使用QElapsedTimer 可以轻松地测量一段程序的运行时间。例如,在两个函数之间测量时间,可以使用QElapsedTimer记录开始时间,然后再记录结束时间,最终计算两个时间值之差即可得到该函数的运行时间。除了基本的计时功能外,QElapsedTimer还具有许多其他特性。 阅读详情

QElapsedTimer提供了一种快捷的计算流逝时间的方法。它通常被用来计算两个事件或操作之间过去了多久。并且,该类的方法非常类似于我们之前讲过的QTime类的三个计时函数,所以,我们可以很快速的在使用这两个类的代码之间进行移植。但是,不像QTime,QElapsedTimer会尽可能的使用某种单调时钟。这也就意味着,系统时间的修改对它不会产生影响,同时也没办法将QElapsedTimer对象转换成人类可读的时间格式。

这个类主要的使用方法就是测量一个操作耗时多久,例子如下:

  QElapsedTimer timer; //定义对象
  timer.start();  //开始计时
  Operation(); 	//相关操作
  qDebug() << "The operation took" << timer.elapsed() << "milliseconds"; //显示结果

同时也可以在一个耗时操作完成后,通过elapsed() 函数的返回值来决定下一个操作可以开始运行的时间。这对于需要在一定的时间周期内完成几个具体的耗时操作来说是至关重要的。如下代码所示:

  void ExecuteOperations(int timeout)
  {
      QElapsedTimer timer;
      timer.start();
      Operation1();
 
      int remainingTime = timeout - timer.elapsed();
      if (remainingTime > 0)
          Operation2(remainingTime);
  }

另一个的使用方法是,一个具体的操作需要运行一定的时间长度。对于这种需求,QElapsedTimer提供了hasExpired() 函数,这个函数可以判断自从上次调用start() 或restart() 之后,是否过去了多少毫秒。如下代码所示:

  void ExecuteOperationsForTime(int ms)
  {
      QElapsedTimer timer;
      timer.start();
 
      while (!timer.hasExpired(ms))
        Operation1();
  }

上面我们说,QElapsedTimer会使用运行平台所支持的某种单调参考时钟。这具有额外的好处,它可以使QElapsedTimer不受系统时间调整的影响,也不受系统时区设置的影响。当然,相对的,这也意味着我们只能把QElapsedTimer的值和那些使用了同样参考时钟的值相比较。特别是,当我们把QElapsedTimer的自从参考点以来的值序列化到某个变量中后,更应该注意这点。并且,不应该把这些值通过网络进行交换或存储到磁盘,因为无法保证接收端的计算机和产生该值的计算机是否使用同一种参考时钟和参考点,也无法保证其自从参考点以来是否发生过重启。但是,我们可以将这些值在运行在同一太机器上的不同进程间进行交换,条件是他们都使用相同的参考时钟。QElapsedTimer在同一台机器上总是使用相同的参考时钟,所以,在一个进程中比较来自另一个进程的QElapsedTimer值是安全的。

注意,QElapsedTimer所使用的时钟类型,有一些是有范围限制的,通常是32-bit,当达到上限时会发生溢出。QElapsedTimer会处理这种情况并提供一致时间。但是,当从QElapsedTimer中提取时间时,同一机器上的两个不同的进程会对实际逝去的时间有不同的理解。

下面,我们就来具体看下QElapsedTimer所使用的集中时钟类型:

SystemTime

该类型的时钟是唯一一种表示实时时间的时钟,它表示子1970.1.1零点以来的毫秒数。它就相当于C或POSIX中的time() 函数,外加毫秒值。这种时钟类型目前只用于不支持 单调时钟的Unix系统。它也是QElapsedTimer可能使用的唯一一种非单调时钟。

MonotonicClock

表示系统的单调时钟,表示的是自过去任意时间点以来的毫秒数。这种时钟类型用于支持POSIX时钟类型的Unix系统(_POSIX_MONOTONIC_CLOCK)。并且,这种时钟类型不会发生溢出。

TickCounter

这种时钟类型的计时基于系统的或处理器的tick数,然后再乘以一个tick的周期。这种时钟类型用于Windows系统。并且,当高精度的性能计数器可用时,会自动使用PerformanceCounter替代这种时钟类型。TickCounter是唯一一种可能发生溢出的时钟类型。但在Windows Vista 和 Windows server 2008上,由于它们支持扩展的64-bit tick counter,可以避免溢出。

在Windows平台,时钟会在232毫秒,即大约49.7天后溢出。这也意味着两个不同的进程通过乘以232毫秒来计算逝去的时间,得到的结果可能是不同的。当进行这类数值得比较时,我们建议将毫秒的高32位屏蔽掉。

MachAbsoluteTime

这种时钟类型是基于Mach kernels 表示的绝对时间,例如 OS X。把这种时钟类型和MonotonicClock区分开是因为OS X 和 IOS也是Unix系统,也可能支持一种和Mach绝对 时间具有不同值的POSIX单调时钟。这种时钟是单调的并且不会发生溢出。

PerformanceCounter

这种时钟类型使用Windows的QueryPerformanceCounter() 和 QueryPerformanceFrequency() 函数访问系统的高精度性能计数器。但因为这种计数器并不是在所有平台上都可用,所以,QElapsedTimer会在该时钟类型不可用时,自动使用TickCounter作为替代。这种时钟类型也是单调的并且不会发生溢出。

搞明白每一种可用的时钟类型和单调性后,我们可以在程序中使用clockType() 函数来获得一个QElapsedTimer对象所使用的底层时钟类型;使用isMonotonic() 函数判断一个QElapsedTimer对象的单调性。

QTimer 和 QElapsedTimer QTimer 是软件定时器,其父类是 QObject。QTimer 的主 要功能是设置以毫秒为单位的定时周期,然后进行连续定时或 单次定时。启动定时器后,定时溢出时 QTimer 会发射 timeout() 信号,为 timeout()信号关联槽函数就可以进行定时处理。QElapsedTimer 用于快速计算两个事件的间隔时间,是软 件计时器。QElapsedTimer 没有父类,其计时精度可以达到纳 秒级。QElapsedTimer 的主要用途是比较精确地确定一段程序 运行的时长。 阅读详情

相关推荐

Qt之QElapsedTimer

QT史上最强高级教程----QElapsedTimer的使用

m0_62599305的博客 3088

【Centos】更新为北京时间

1、查看系统时间 date 2、查看硬件时间 hwclock 3、查看系统时间方面的各种状态 timedatectl 4、列出所有时区 timedatectl list-timezones 5、将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间 timedatectl set-local-rtc 1 6、安装utpdate工具 yum -y install utp ntpdate 7、设置系统时间与网络时间同步 ntpdate cn.pool.ntp.org 8、将系统时

星辰大海 945

Qt QElapsedTimer类详解:高精度计时与性能分析利器

摘要:QElapsedTimer是Qt框架提供的高精度计时工具,主要用于代码性能分析和时间间隔测量。该计时器支持纳秒级精度,不依赖事件循环,具有跨平台和线程安全特性。核心功能包括启动计时(start)、获取时间差(elapsed/nsecsElapsed)、超时检测(hasExpired)和时钟类型查询。适用于代码性能测试、帧率计算、超时控制等场景。最佳实践包括复用计时器对象、注意线程安全、定期检查有效性,并推荐使用nsecsElapsed()获取更高精度。通过合理使用QElapsedTimer可以显著提升

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 289

Qt扫盲-QElapsedTimer理论总结

QElapsedTimer类通常用于快速计算两个事件之间经过了多长时间。它的API与QTime类似,因此正在使用的代码可以快速移植到新类。通常我们计算的时间是用一个 QTime的两次减法,来计算差值,这个类也完全可以胜任。但与QTime不同,QElapsedTimer试图在可能的情况下使用单调时钟。这意味着不能将QElapsedTimer对象转换为人类可读的时间。该类的典型用例是确定在缓慢的操作中花费了多少时间。

洪源兄 2244

使用QElapsedTimer类进行计时编程

通过创建QElapsedTimer对象、调用start()函数开始计时、执行需要计时的代码段,并使用elapsed()函数获取经过的时间,我们可以方便地对代码的执行时间进行测量和分析。在这个示例中,我们在main()函数中创建了一个QElapsedTimer对象timer,并调用了它的start()函数开始计时。在这个示例中,我们创建了一个名为timer的QElapsedTimer对象,并通过调用start()函数开始计时。在大多数平台上,它提供的精度是足够高的,可以满足一般的计时需求。

ByteJolt的博客 266

QT6 源(89):阅读与注释计时器类 QElapsedTimer ,源代码以及属性测试。该类没有继承于 QObject

(1)(2)

zhangzhangkeji的博客 255

【QT】QT之QElapsedTimer计时

提供了一种。它通常被用来计算两个事件或操作之间过去了多久。并且,该类的方法非常数,所以,我们可以很快速的在使用这两个类的代码之间进行移植。但是,。这也就意味着,系统时间的修改对它不会产生影响,同时也没办法将对象转换成人类可读的时间格式。这个类主要的使用方法就是测量一个操作耗时多久,例子如下: 同时也可以在一个耗时操作完成后,通过elapsed() 函数的返回值来决定下一个操作可以开始运行的时间。这对于需要在一定的时间周期内完成几个具体的耗时操作来说是至关重要的。如下代码所示: 另一个的使用方法是,一个具体的

qq_43331089的博客 1万+

CELF(Cost-Effective Lazy Forward selection)具有成本效益的惰性前向选择算法

CELF(Cost-Effective Lazy Forward selection)算法解析      引言:在社交网络影响力最大化问题的求解过程中,我们往往需要去选择一些目标种子结点作为信息初始传播的源头。贪婪算法在传播效果上的解决可以达到影响的最大化,但是在时间复杂度上面显得确十分糟糕。为此CELF算法应势而生,CELF算法利用了函数次模性的特点,在第一轮选择种子结点时,计算网络中所有节点的边际收益,但将在之后的过程中,不再做网络节点边际收益的重复计算,这相对于传统的贪婪算法,将在时间上得到非常明显的

hahaxq的博客 2476

Qt计时(QElapsedTimer)

注:start() 启动计时器, elapsed() 返回从启动到当前经过的毫秒数,精度通常为1毫秒,但实际受操作系统调度影响,误差通常小于1ms。

2501_90130554的博客 618

用R搞定生态溯源:MixSIAR贝叶斯混合模型从安装到出图的保姆级教程

本文提供了一份详细的MixSIAR贝叶斯混合模型教程,涵盖从R环境配置、数据预处理到模型参数设置和可视化分析的完整流程。通过实战案例和常见问题解决方案,帮助生态学研究者快速掌握混合模型在生态溯源中的应用,提升数据分析效率。

weixin_42531516的博客 466

Class AB OPA STB仿真相位异常:从corner case到碰撞电离的排查与规避

本文深入分析了Class AB运算放大器(OPA)在STB稳定性仿真中,特定工艺角(corner case)下出现相位从0°开始的异常现象。排查发现,其根本原因在于高Vds引发的碰撞电离效应,通过衬底和电源网络引入了隐藏的正反馈通路。文章对比了修改衬底连接与优化电路降低Vds两种解决方案,并基于工程实践推荐了代价更小、兼容性更好的电路优化方案,成功规避了问题并完成流片验证。

grape的博客 636

Qt毫米级计时器—如何使用QElapsedTimer来进行计时

Qt提供了QElapsedTimer类,它可以用于计时,并且它尽可能的使用单调时间,所以系统时间的修改,不会受到影响,接下来将说明如何使用QElapsedTimer来进行计时。 工具/原料 Qt Creator 4.9.1 方法/步骤 1/6分步阅读 打开Qt Creator集成工具,定义QElapsedTimer的对象,调用该对象的Start函数开始计时,在想要获取运行的时间的地方,调用elapsed函数,单位为毫秒 2/6 休眠了三秒时间,通过elapsed耗费的时间也是三秒

qq_45380392的博客 1309

Android 开发实战:从零到一集成 espeak-ng 实现中文离线 TTS(无需账号开箱即用)

本文详细介绍了如何在 Android 项目中集成 espeak-ng,实现中文离线语音播报。通过下载 so 库、编写 Java 接口、封装管理类,开发者可快速构建无需账号的 TTS 功能。文章覆盖从零到一的开发步骤、调试技巧及性能优化,适合中高级 Android 开发者参考。

全栈 3317

【Qt-QElapsedTimer】QElapsedTimer 计时器

QElapsedTimer提供了一种快捷的计算流逝时间的方法。它通常被用来计算两个事件或操作之间过去了多久。并且,该类的方法非常类似于我们之前讲过的QTime类的三个计时函数,所以,我们可以很快速的在使用这两个类的代码之间进行移植。但是,不像QTime,QElapsedTimer会尽可能的使用某种单调时钟。这也就意味着,没办法将QElapsedTimer对象转换成人类可读的时间格式。 这个类的典...

好习惯成就伟大 4827

H3C无线控制器AC与第三方认证系统集成实现企业级Portal短信认证方案

本文详细阐述了如何将H3C无线控制器(AC)与第三方认证系统集成,构建企业级Portal短信认证方案。该方案通过手机号作为临时凭证,实现了访客网络的实名追溯、权限控制与专业体验。文章深入解析了方案原理、H3C AC的关键配置步骤、第三方系统对接要点及短信网关选型避坑指南,为企业提升网络安全管理与访客服务质量提供了完整、可行的实战指导。

a3b4c5的博客 194

使用Clumsy和Process Explorer定位软件高CPU占用问题

使用弱网模拟工具Clumsy和进程查看工具Process Explorer定位软件高CPU占用问题。

dvlinker的技术专栏 5706

Qt QElapsedTimer 计时器

Qt QElapsedTimer 计时器

m0_73443478的博客 2178

[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记

最近开始学习网络安全相关知识,接触了好多新术语,感觉自己要学习的东西太多,真是学无止境,也发现了好几个默默无闻写着博客、做着开源的大神。接下来系统分享一些网络安全的自学笔记,希望读者们喜欢。 上一篇文章分享了看雪Web安全总结知识和一个异或解密的示例,本篇文章着重讲解Chrome浏览器保留密码功能渗透解析及登录加密入门笔记,结合实际例子一步步实现浏览器漏洞的挖掘。非常基础的文章,希望对入门的博友们有帮助,大神请飘过,谢谢各位看官!

杨秀璋的专栏 2万+

QElapsedTimer计时

QElapsedTimer

weixin_43165135的博客 2655

五种音频器件综合对比——《器件手册--音频器件》

音频器件当在蜂鸣片的两片电极之间接通交流音频信号时,蜂鸣片会根据信号的大小和频率发生振动,从而产生相应的声音。结构简单、造价低廉。广泛应用于玩具、电子表、电子仪器、电子钟表、定时器等电子电器方面。蜂鸣器是一种一体化结构的电子讯响器,采用直流电源供电,广泛应用于各种电子产品中作发声器件有源蜂鸣器:内部带震荡源,通电即发声,程序控制方便。无源蜂鸣器:内部不带震荡源,需用方波驱动,声音频率可控,价格相对便宜。计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品。

XU157303764的博客 1535

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Qt QElapsedTimer 详解

QElapsedTimer是Qt框架中提供的一个高精度计时器类,主要用于测量代码执行时间和事件间隔。它能够在不同操作系统上提供准确的计时功能,并返回毫秒或纳秒级别的时间。QElapsedTimer没有父类,不支持Qt的元对象系统,因此只有接口函数。其计算精度比较高,非常适用于需要高精度计时的应用程序,如图形应用程序、动画游戏以及性能测试等。

ckg3824278的博客 1444

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

QT QElapsedTimer QDeadlineTimer 计算已用时间的方法

QElapsedTimer timer; timer.start(); slowOperation1(); qDebug()

thanklife的专栏 831

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

qt获取微秒时间

Qt 中可以使用 QElapsedTimer 类来获取微秒级的时间。 使用方法如下: 创建 QElapsedTimer 对象。 使用 start() 方法开始计时。 使用 elapsed() 方法获取计时器经过的时间,该方法返回类型为 qint64,单位为微秒。 例如: QElapsedTimer timer; timer.start(); // 在此处执行要测量的代码 qint64...

weixin_35756690的博客 3437

C++|Qt如何测量代码执行时间,实现性能分析、超时检测和帧率控制等场景

QElapsedTimer与C++计时工具对比摘要 Qt框架中的QElapsedTimer 专为高精度时间间隔测量设计 使用系统单调时钟,不受系统时间调整影响 核心用途:代码性能分析、超时检测、帧率控制 典型方法:start()、elapsed()、restart() C++标准库替代方案 <chrono>库(推荐) 提供类型安全的高精度计时 使用high_resolution_clock实现纳秒级精度 完全跨平台,现代C++标准实现 传统计时方法 clock():测量CPU时间而非实际时间 平

编程改变世界。想做一些改变世界的产品。感谢一键三连。 1871

QTimer、QElapsedTimer、QDeadlineTimer

QTimer 是 Qt 中用于定时执行操作的类,它提供了单次和重复定时器的功能。

深之JohnChen的专栏 1965

QT中的定时器与计时器

笔者写Qt的时候经常遇到需要定时完成任务的情况。举个例子:我写串口通信程序的时候需要定时向下位机发送数据。或者是定时任务周期性出发(更新时间等)

charlie114514191的博客 2470
上一篇: QConcurrent、QFuture和QFutureWatcher
下一篇: 几个简单的基本的sql语句
自先沉稳~
博客等级 码龄8年 59粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值