c++ chrono头文件内Duration 、time_point和Clock

前言

        http://t.csdnimg.cn/eprLZ中介绍了关于chrono的基本操作,本文来介绍chrono与其他类的关系。

内容

Duration

        duration 表示一段时间间隔

 template<class Rep, class Period = std::ratio<1>> 
 class duration

        Rep表示持续时间的数值类型,如int、long long等。这个类型用于存储时间单位的数量上下限;

        Period(可选,默认为std::ration<1>):一个编译时常量时间周期,表示每个Rep单位代表的时间长度。

        std::ration是一个模板类,用于表示编译时的分数(分子和分母都是编译时常量)。默认情况下,Period是std::ration<1>,表示每个Rep单位代表1个时间单位(如秒、毫秒等,具体取决于上下文)。

        通过组合不同的Rep和Period可以表示不同的长度和精度的时间段,同时,标准库本身也提前预定义了一些类型

typedef duration <Rep, ratio<3600,1>> hours;                 // 小时
typedef duration <Rep, ratio<60,1>> minutes;                 // 分钟
typedef duration <Rep, ratio<1,1>> seconds;                  // 秒
typedef duration <Rep, ratio<1,1000>> milliseconds;          // 毫秒
typedef duration <Rep, ratio<1,1000000>> microseconds;       // 微秒
typedef duration <Rep, ratio<1,1000000000>> nanoseconds;     // 纳秒

        我们也可以自己定义自己所需要长度和精度的时间段;

// 以毫秒为时间单位的整数时间长度
std::chrono::duration<int, std::ratio<1, 1000>>
// 以纳秒为时间单位的长整形时间长度
std::chrono::duration<long long, std::ratio<1, 1000000000>> 

time_point

        time_point 表示一个时间点;

        原型:

template<class _Clock, class _Duration = typename _Clock::duration>
class time_point

        _Clock表示时钟类型,例如:std::chrono::system_clock , std::chrono::steady_clock和std::chrono::high_resolution_clock等

        _Clock::duration (可选,带默认值)表示一个持续时间类型;

        简单使用

std::chrono::time_point<std::chrono::steady_clock, std::chrono::duration<long long, std::nano>> start = std::chrono::steady_clock::now();


auto c = start.time_since_epoch().count();
cout<< c <<endl;

        time_point可以通过time_since_epoch成员函数获取从1970年1月1日0点0分0秒到到当前时间点的持续时间

        两个time_point进行减法运算

    auto start = std::chrono::steady_clock::now();
    for (int i = 0; i < 10000; i++)
    {
        for (auto j = 0; j < 10000; j++)
        {
        }
    }
    auto end = std::chrono::steady_clock::now();
    auto duration = end - start;
    std::cout << "dur::" << duration.count() << endl;

        为了方便,我使用auto自动推导类型,但是可以知道  start和end 都是time_point类型,

在进行减法运算后,得到一个duration类型值。也就是说两个时间点相减,得道一个时间段

Clock

        high_resolution_clock:高精度时钟

        system_clock:从系统获取的时钟

        steady_clock:不能被修改的时钟

        区别:

        system_clock是微秒精度且可调整,steady_clock和high_resolution_clock是纳秒精度不可调整。

    auto now = std::chrono::system_clock::now();
    auto now2 = std::chrono::steady_clock::now();
    auto now3 = std::chrono::high_resolution_clock::now();

    cout << "system_clock::" << now.time_since_epoch().count() << endl;
    cout << "system_clock::" << std::chrono::system_clock::is_steady << endl;
    cout << "system_clock::" << std::chrono::system_clock::period::den << endl;
    cout << "system_clock::" << std::chrono::system_clock::period::num << endl;

    cout << "steady_clock::" << now2.time_since_epoch().count() << endl;
    cout << "steady_clock::" << std::chrono::steady_clock::is_steady << endl;
    cout << "steady_clock::" << std::chrono::steady_clock::period::den << endl;
    cout << "steady_clock::" << std::chrono::steady_clock::period::num << endl;

    cout << "high_resolution_clock::" << now3.time_since_epoch().count() << endl;
    cout << "high_resolution_clock::" << std::chrono::high_resolution_clock::is_steady << endl;
    cout << "high_resolution_clock::" << std::chrono::high_resolution_clock::period::den << endl;
    cout << "high_resolution_clock::" << std::chrono::high_resolution_clock::period::num << endl;

参考

http://t.csdnimg.cn/f6y7D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直在找资料的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值