chrono时间库

1、std::chrono标准时间库

利用CPP强类型的特点,明确区分时间点和时间段,明确区分不同的时间单位。

  • 时间点例子:2022年11月8日12点:55分:10秒。
  • 时间段例子:1分30秒。
  • 时间点类型:chrono::steady_clock::time_point等。
  • 时间段类型:chrono::millseconds,chrono::seconds,chrono::minutes等。
  • 方便的运算符重载:时间点+时间段=时间点,时间点-时间点=时间段。

示例代码如下:

auto t0=chrono::steady_clock::now();     //获取当前时间点
auto t1=t0+chrono::seconds(30); //当前时间点的30秒后
auto dt=t1-t0;  //获取两个时间点的差(时间段)
auto sec=chrono::duration_cast<chrono::seconds>(dt).count(); //时间差的秒数

2、案例:计算花费时间

在所执行的程序未执行时,先通过chrono::steady_clock::now()获取当前时间点,然后执行程序,再通过chrono::steady_clock::now()获取执行程序后的时间点,最后两个时间点相减得到程序所耗费时间段,示例代码如下:

#include<iostream>
#include<thread>
#include<chrono>
//案例:计算花费时间(int类型)
int main()
{
    auto startTime = std::chrono::steady_clock::now();
    for (int i = 0; i < 10000000; i++);
    auto endTime = std::chrono::steady_clock::now();
    int dt = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();
    std::cout << "run time: " << dt << "ms"<<std::endl;
}

测试结果如下:
在这里插入图片描述
上面是执行时间段为整形,如下是输出double类型的时间段:

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

//案例:计算花费时间(double类型)
int main()
{
    auto startTime = std::chrono::steady_clock::now();
    for (int i = 0; i < 10000000; i++);
    auto endTime = std::chrono::steady_clock::now();
    using double_ms = std::chrono::duration<double, std::milli>;
    auto dt = std::chrono::duration_cast<double_ms>(endTime - startTime).count();
    std::cout << "run time: " << dt << "ms"<<std::endl;
}

测试结果如下:
在这里插入图片描述

注意:duration_cast可以在任意的duration类型之间转换,duration表示用T类型表示,且时间单位用R。R省略不写就代表秒,std::milli就是毫秒,std::micro就是微秒。seconds是duration的类型别名。millseconds是duration< int64_t,std::mill >的类型别名。这里我们创建了double_ms作为duration< double,std::mill>的别名

3、跨平台sleep:this_thread::sleep_for

可以使用std::this_thread::sleep_for代替Unix操作系统专有的usleep。它可以让当前线程休眠一段时间,然后继续运行,示例代码如下:

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

int main()
{
    std::this_thread::sleep_for(std::chrono::milliseconds(500));
    std::cout<<"hello world"<<std::endl;
    return 0;
}

这里的休眠单位可以自己指定,比如这里是millseconds表示毫秒,也可以换成microseconds表示微秒,seconds表示秒,chrono的强类型让单位选择更自由,而且chrono时间库的精度更准确

4、睡到时间点:std::this_thread::sleep_until

除了接受一个时间段sleep_for,还有接受一个时间点的sleep_until,表示让当前线程休眠到某个时间点。示例代码如下:

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

int main()
{
	auto t=std::chrono::steady_clock::now()+std::chrono::milliseconds(500);
    std::this_thread::sleep_until(t);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值