ToB企服应用市场:ToB评测及商务社交产业平台

标题: C++11时间工具<chrono>梳理 [打印本页]

作者: 刘俊凯    时间: 2024-7-14 21:13
标题: C++11时间工具<chrono>梳理
目录



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

duration表示一段时间间隔,用来记录时间长度,可以表示几秒、几分钟、几个小时的时间间隔。duration的原型如下:
  1. // 定义于头文件 <chrono>
  2. template<
  3.         class Rep, //单位类型 == 单位次数(多少个单位) == 多少个周期数
  4.         class Period = std::ratio<1>  //单位  Period:周期,默认周期为1s
  5. > class duration;
复制代码
模板参数:
常用的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;

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

  1. duration& operator= (const duration& rhs) = default;
  2. constexpr duration operator+() const;
  3. constexpr duration operator-() const;
  4. duration& operator++();
  5. duration  operator++(int);
  6. duration& operator--();
  7. duration  operator--(int);
  8. duration& operator+= (const duration& rhs);
  9. duration& operator-= (const duration& rhs);
  10. duration& operator*= (const rep& r);
  11. duration& operator/= (const rep& r);
  12. duration& operator%= (const rep& r);
  13. duration& operator%= (const duration& rhs);
复制代码

留意事项:duration的加减运算有一定的规则,当两个duration时钟周期不雷同的时候,会先统一成一种时钟,然后再进行算术运算,统一的规则如下:假设有ratio 和 ratio两个时钟周期,首先需要求出x1,x2的最大公约数X,然后求出y1,y2的最小公倍数Y,统一之后的时钟周期ratio为ratio。
exam:
[code]    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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4