chrono
是C++11新加入的方便时间日期操作的标准库,它既是相应的头文件名称,也是std命名空间下的一个子命名空间,所有时间日期相关定义均在std::chrono
命名空间下。通过这个新的标准库,可以非常方便进行时间日期相关操作。
chrono库主要包含了三种类型:duration, time_point 和 clock。
Duration(时间间隔)
chrono库中用一个duration
模板类,用来表示一段时间间隔,可以表示几秒钟、几分钟或者几个小时的时间间隔。
原型
template<typename _Rep, typename _Period = ratio<1>>
struct duration
{
typedef _Rep rep;
...
private:
rep __r; //内部维护的计数个数成员
...
};
第一个模版参数是数值类型,表示时钟个数;第二个为std::ratio,用来表示每个时钟的周期(单位为秒)。
ratio的原型是
template<intmax_t _Num, intmax_t _Den = 1>
struct ratio;
这是一个非类型模版参数的模版类,intmax_t是定义在cstdint头文件中的内置类型。第一个参数代表分子,第二个代表分母,两者表示一个通用的比率类型。它们必须在编译期间确定为常量值。分母默认为1,因此ratio<60>
代表60,ratio<1, 1000>
代表0.001。为了方便使用,在ratio头文件中定义了常用比率的别名:
typedef ratio<1, 1000000000000000000> atto;
typedef ratio<1, 1000000000000000> femto;
typedef ratio<1, 1000000000000> pico;
typedef ratio<1, 1000000000> nano;
typedef ratio<1, 1000000> micro;
typedef ratio<1, 1000> milli;
typedef ratio<1, 100> centi;
typedef ratio<1, 10> deci;
typedef ratio< 10, 1> deca;
typedef ratio< 100, 1> hecto;
typedef ratio< 1000, 1> kilo;
typedef ratio< 1000000, 1> mega;
typedef ratio< 1000000000, 1> giga;
typedef ratio<