巫雪艷 发表于 6 天前

C++11标准库 时间工具<chrono>梳理

目录

[*]

[*]时间间隔duration

[*]常用的duration

[*]时间点time_point
[*]时钟system_clock & steady_clock

[*]system_clock

[*]代码举例

[*]steady_clock

[*]例程:


[*]转换函数

[*]1.duration_cast

[*]Description:
[*]duration支持隐式转换的规则

[*]2. time_point_cast





C++11中提供了日期和时间相关的库chrono。
chrono库主要包含三种类型的类:时间间隔duration、时钟clocks、时间点time point。
时间间隔duration


[*]常用类成员
duration表示一段时间间隔,用来记录时间长度,可以表示几秒、几分钟、几个小时的时间间隔。duration的原型如下:
// 定义于头文件 <chrono>
template<
        class Rep, //单位类型 == 单位次数(多少个单位) == 多少个周期数
        class Period = std::ratio<1>//单位Period:周期,默认周期为1s
> class duration;模板参数:

[*]Rep:Representation(表示),这是一个数值类型,用于表示时钟数(周期)的类型(默认为整形)。若 Rep 是浮点数,则 duration 能使用小数描述时钟周期的数目。
[*]Period:表示时钟的周期,它的原型如下:
// 定义于头文件 <ratio>
template<
    std::intmax_t Num,
    std::intmax_t Denom = 1
> class ratio;位于命名空间std
ratio(比率;比例)类表示每个时钟周期的单位,如秒、毫秒、微秒,其中第一个模板参数Num(Numerator)代表分子,Denom(denominator)代表分母,该分母值默认为1,因此,ratio代表的是一个分子除以分母的数值,比如:ratio代表一个时钟周期是2秒,ratio代表一分钟,ratio代表一个小时,ratio代表一天。而ratio代表的是1/1000秒,也就是1毫秒,ratio代表一微秒,ratio代表一纳秒。
std::ratio - cppreference.com

常用的duration

为了方便使用,在标准库中定义了一些常用的时间间隔,比如:时、分、秒、毫秒、微秒、纳秒,它们都位于chrono命名空间下,定义如下:
类型定义纳秒:std::chrono::nanosecondsusing nanoseconds= duration;微秒:std::chrono::microsecondsusing microseconds = duration;毫秒:std::chrono::millisecondsusing milliseconds = duration;秒:std::chrono::secondsusing seconds      = duration;分钟:std::chrono::minutesusing minutes      = duration;小时:std::chrono::hoursusing hours      = duration;

[*]duration类的构造函数原型如下:
// 1. 拷贝构造函数
duration( const duration& ) = default;//浅拷贝
// 2. 通过指定时钟周期的类型和次数来构造对象(以缺省单位秒直接构造)j
template< class Rep2 >
constexpr explicit duration( const Rep2& r ); //std::chrono::duration<int> sec(1);//1秒
// 3. 通过指定时钟周期类型,和时钟周期长度来构造对象
template< class Rep2, class Period2 >
constexpr duration( const duration<Rep2,Period2>& d );//改变单位

[*]为了更加方便的进行duration对象之间的操作,类内部进行了操作符重载:
duration& operator= (const duration& rhs) = default;
constexpr duration operator+() const;
constexpr duration operator-() const;
duration& operator++();
durationoperator++(int);
duration& operator--();
durationoperator--(int);
duration& operator+= (const duration& rhs);
duration& operator-= (const duration& rhs);
duration& operator*= (const rep& r);
duration& operator/= (const rep& r);
duration& operator%= (const rep& r);
duration& operator%= (const duration& rhs);
注意事项:duration的加减运算有一定的规则,当两个duration时钟周期不相同的时候,会先统一成一种时钟,然后再进行算术运算,统一的规则如下:假设有ratio 和 ratio两个时钟周期,首先需要求出x1,x2的最大公约数X,然后求出y1,y2的最小公倍数Y,统一之后的时钟周期ratio为ratio。
exam:
    std::chrono::duration d1(3); //单位为9/7秒    std::chrono::duration d2(1); //单位为6/5秒    /*    9和6的最大公约数是3;    7和5的最小公倍数是35;    */    // d1 和 d2 统一之后的时钟周期    std::chrono::duration d4 = d1 - d2;   auto d3 = d1 - d2;    std::cout
页: [1]
查看完整版本: C++11标准库 时间工具<chrono>梳理