c++11 日期和时间工具-(std::chrono)

链接

std::chrono是C++11引入的日期时间处理库,其中包含3种时钟:

system_clock,steady_clock,high_resolution_clock。

定义于头文件 <chrono>

std::chrono 库

system_clock

steady_clock

链接

链接2

    std::chrono::steady_clock::time_point tp1=std::chrono::steady_clock::now();
    std::cout<<"1970.1.1-----now:"<<tp1.time_since_epoch().count()<<std::endl;
    int i=100;
    while(i) i--;
    std::chrono::steady_clock::time_point tp2=std::chrono::steady_clock::now();
    std::chrono::duration<double> dur=tp2-tp1;
    std::cout<<"time duratino="<<dur.count()<<std::endl;

high_resolution_clock

std::chrono::time_point<>

类模板,记录的是三种时钟的一种返回的时间点。

第一种使用方法:

#include <iostream>
 
#include <chrono>
 
int main()
 
{
 
    std::chrono::steady_clock::time_point t1 = std::chrono::system_clock::now();
 
    std::cout << "Hello World\n";
 
    std::chrono::steady_clock::time_point t2 = std::chrono:: system_clock::now();
 
    std::cout << (t2-t1).count()<<” tick count”<<endl;
 
}

第二种使用方法:

#include <iostream>
 
#include <chrono>
 
int main()
 
{
 
    std::chrono::time_point<std::chrono::steady_clock> t1 = std::chrono::system_clock::now();
 
    std::cout << "Hello World\n";
 
    std::chrono::time_point<std::chrono::steady_clock> t2 = std::chrono:: system_clock::now();
 
    std::cout << (t2-t1).count()<<” tick count”<<endl;
 
}

time_point的单位

每一次调用time_point都是记录一次从1970年1月1日到现在的秒数

单位:纳秒;

精度:纳秒

std::chrono::duration<>

记录时钟的时间间隔,

#include <iostream>
#include <vector>
#include <numeric>
#include <chrono>
 
volatile int sink;
int main()
{
    for (auto size = 1ull; size < 1000000000ull; size *= 100)
    {
        // 记录开始时间
        auto start = std::chrono::steady_clock::now();
        // 做一些工作
        std::vector<int> v(size, 100);
        sink = std::accumulate(v.begin(), v.end(), 0u); 
        // 记录结束时间
        auto end = std::chrono::steady_clock::now();
        std::chrono::duration<double> diff = end - start;
        std::cout << std::fixed << "Time to fill and iterate a vector of "
                  << size << " ints : " << diff.count() << " s\n";
    }
}

duration<>的时间单位

template<class _Rep, class _Period = ratio<1> > class duration;

第一个参数是用来表示用什么数据类型来记录存储的时间值;

第二个参数是时间的单位,默认为1秒,可以通过设置ratio<>模板中的参数设置时间单位:

  1. chrono::duration<int,ratio<60>> two_minutes(2);  //60就是一分钟
  2. chrono::duration<int,ratio<1,1000>> two_milliseconds(2);  //1/1000=0.001,时间单位1毫秒
  3. chrono::duration<int,ratio<60 * 60 * 24>> two_days(2);

链接

time_since_epoch().count()

显示时间点的时间

std::chrono::steady_clock::now(); // 纳秒
uint64_t ui64MicroSecondsTp = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); // 微秒
uint64_t ui64MilliSecondsTp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); // 毫秒

微秒,毫秒,纳秒

microseconds, milliseconds, nanoseconds

时间单位转换--duration_cast

#include <iostream>
#include <chrono>
#include <thread>

int main()
{
    auto start = std::chrono::steady_clock::now();
    std::this_thread::sleep_for(std::chrono::seconds(1));
    auto end = std::chrono::steady_clock::now();
    std::cout << "Time spent--ns: " << (end - start).count() << std::endl;
    std::cout << "Time spent--ms: " << std::chrono::duration_cast<std::chrono::milliseconds>((end - start)).count() << std::endl;

    return 0;
}

sleep

sleep

头文件:#include <unistd.h>

在unix上单位是毫秒,在windows上单位是秒;

sleep_for

头文件:#include <thread>

怎么利用sleep设置各种单位时间--sleep_for

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值