[c++]-利用chrono标准库实现c++毫秒级精准计时,完成图像推理时间计算,并输出FPS

本文详细介绍了C++11标准库chrono的主要功能与用法,包括时钟(clock)、时间间隔(duration)和时间点(time_point)的概念及其实现方式,并通过实例展示了如何使用chrono精确测量程序运行时间。

资源

Date and time utilities

- C++ Reference

简介

在计算机视觉中我们可能经常需要计算一次推理的耗时,来得到确定的FPS,查了很多其他方法,尤其是clock()这个方法对于ms级计时来说也太不准了。这些方法都太古老了,有的还要区分电脑是不是win。终于被我找到了c++11中的标准库--chrono,又准又快!

不想看罗嗦的介绍的同学可以直接看 1.2中 标黄的例子


1.chrono介绍

主要包含如下的几部分

Clocks

  • system_clock
  • steady_clock
  • high_resolution_clock

Duration

  • duration

Time point

  • time_point

1.1 Clocks

一个时钟(clock)包含了两部分:时钟原点和时钟节拍。时钟原点通常是 1970-01-01 00:00:00 UTC,一段时间的时钟节拍数除以振动频率,可以得到这段时间的具体时间。

C++ 定义了三种类型的时钟:

std::chrono::system_clock:本地系统的当前时间 (可以调整)
std::chrono::steady_clock:不能被调整的,稳定增加的时间
std::chrono::high_resolution_clock:提供最高精度的计时周期

system_clock 的时间值可以在操作系统内部进行调整,比如在上午九点,把时间改成下午六点,通常用于获取当前时间。

steady_clock 表示过去某个时间点到现在之间的时间,这个时间不能被调整,物理时间增加,它一定增加,而且与系统时间无关(可以是系统重启以来的时间段),最适合于计算程序的耗时时长。

high_resolution_clock 是一个高分辨率时钟,时间刻度最小。在不同的标准库中,high_resolution_clock 的实现不一致,所以官方不建议使用这个时钟,前两个时钟已经能够满足我们日常的使用要求了。

每一个 clock 类中都有确定的 time_point, duration, Rep, Period 类型,这些类型后面都会讲到。

接下来详细介绍前两个时钟。

这两个时钟类都提供了一个静态成员函数 now() 用于获取当前时间,该函数的返回值都是 time_point 类型,system_clock 还另外提供了两个支持系统时间和 std::time_t 相互转换的静态成员函数: to_time_t()from_time_t()

来看一个例子

#include <iostream>
#include <chrono>
#include <thread>
// using namespace std::chrono;

int main() {
   
   
    // "start" and "end"'s type is std::chrono::time_point
    std::chrono::time_point<std::chrono::steady_clock> start = std::chrono::steady_clock::now();
    {
   
      
        std::this_thread::sleep_for(std::chrono::seconds(2));
    }
    std::chrono::time_point<std::chrono::steady_clock> end = std::chrono::steady_clock::now();

    std::chrono::duration<double> elapsed = end - start;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值