前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt中使用QElapsedTimer类计算某个操作执行的毫秒时间

Qt中使用QElapsedTimer类计算某个操作执行的毫秒时间

作者头像
ccf19881030
发布2021-07-27 15:08:06
2.6K0
发布2021-07-27 15:08:06
举报
文章被收录于专栏:ccf19881030的博客

在Qt中有一个 QElapsedTimer类,QElapsedTimer 类提供了一种计算经过时间的快速方法。,以毫秒为单位。

QElapsedTimer 类通常用于快速计算两个事件之间经过的时间。它的 API 与 QTime 的 API 相似,因此可以将使用它的代码快速移植到新类中。 然而,与 QTime 不同的是,QElapsedTimer 尽可能尝试使用单调时钟。这意味着不可能将 QElapsedTimer 对象转换为人类可读的时间。 该类的典型用例是确定在慢速操作中花费了多少时间。这种情况的最简单示例是出于调试目的,如下例所示:

代码语言:javascript
复制
QElapsedTimer timer;
timer.start();

slowOperation1();

qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds";

在这个例子中,定时器是通过调用 start() 来启动的,经过的时间是由 elapsed() 函数计算出来的。 在第一个操作完成后,经过的时间也可用于重新计算可用于另一个操作的时间。当执行必须在特定时间段内完成但需要几个步骤时,这很有用。 QIODevice 及其子类中的 waitFor 类型函数就是这种需求的好例子。在这种情况下,代码可能如下所示:

代码语言:javascript
复制
  void executeSlowOperations(int timeout)
  {
      QElapsedTimer timer;
      timer.start();
      slowOperation1();

      int remainingTime = timeout - timer.elapsed();
      if (remainingTime > 0)
          slowOperation2(remainingTime);
  }

另一个用例是针对特定时间片执行特定操作。为此,QElapsedTimer 提供了 hasExpired() 便利函数,该函数可用于确定是否已经过去了一定的毫秒数:

代码语言:javascript
复制
  void executeOperationsForTime(int ms)
  {
      QElapsedTimer timer;
      timer.start();

      while (!timer.hasExpired(ms))
          slowOperation1();
  }

在这种情况下,使用 QDeadlineTimer 通常更方便,它计算未来的超时而不是跟踪经过的时间。

测试代码如下:

代码语言:javascript
复制
#include <QCoreApplication>
#include <QElapsedTimer>
#include <QDebug>


void slowOperation1()
{
    long long total = 0;
    for (int i = 0; i <= 10000000; i++)
    {
        total += i * 3;
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QElapsedTimer timer;
    timer.start();

    slowOperation1();

    double ms = timer.elapsed();

    qDebug() << "The slow operation took" << ms << "milliseconds";

    return a.exec();
}

运行结果如下:

代码语言:javascript
复制
The slow operation took 62 milliseconds
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档