大家平时工作,如果有计算函数耗时或者打印当前时间的需求,一定要来看看这篇文章!
首先介绍下C++标准中的chrono库
chrono是一个关于时间的库,起源于boost,现在是C++的标准,话说现在的C++标准好多都是源于boost,要进标准的特性似乎都会先在boost试验一番。
首先看一下使用chrono简单计时的示例代码:
void func() { // 计时 std::chrono::time_point<std::chrono::high_resolution_clock> begin = high_resolution_clock::now(); std::this_thread::sleep_for(std::chrono::milliseconds(20)); auto end = high_resolution_clock::now(); cout << "time " << duration_cast(end - begin).count() << endl;}
chrono中有三个概念duration、time_point、clock
duration:表示一段时间,三分钟、三秒等,它的定义如下:
template <class _Rep, class _Period = ratio<1>> class duration;
ratio的定义如下:
template <intmax_t N, intmax_t D = 1> class ratio;
Rep表示数据类型,int,long等,Period表示时间单位,N是分子,D是分母,直接看例子吧:
using atto = ratio<1, 1000000000000000000LL>;using femto = ratio<1, 1000000000000000LL>;using pico = ratio<1, 1000000000000LL>;using nano = ratio<1, 1000000000>;using micro = ratio<1, 1000000>;using milli = ratio<1, 1000>;using centi = ratio<1, 100>;using deci = ratio<1, 10>;using deca = ratio<10, 1>;using hecto = ratio<100, 1>;using kilo = ratio<1000, 1>;using mega = ratio<1000000, 1>;using giga = ratio<1000000000, 1>;using tera = ratio<1000000000000LL, 1>;using peta = ratio<1000000000000000LL, 1>;using exa = ratio<1000000000000000000LL, 1>;using nanoseconds = duration<long long, nano>;using microseconds = duration<long long, micro>;using milliseconds = duration<long long, milli>;using seconds = duration<long long>;using minutes = duration<int, ratio<60>>;using hours = duration<int, ratio<3600>>;using hours2 = duration<int, ratio<3600, 1>>;using hours2 = duration<int, ratio<7200, 2>>;
详细看完上述例子您也明白了,ratio的默认的时间单位是1秒,以小时为例,一小时等于3600秒,3600 / 1 == 7200 / 2 == 3600,所以hours == hours2 == hours3。
标准库还提供了duration_cast用于转换各种duration。