C++11标准库<chrono>、<future>、 <atomic>、<condition_variable> ...

打印 上一主题 下一主题

主题 904|帖子 904|积分 2712

目录



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;
复制代码
模板参数:

  • Rep:Representation(表示),这是一个数值范例,用于表示时钟数(周期)的范例(默认为整形)。若 Rep 是浮点数,则 duration 能使用小数描述时钟周期的数目。
  • Period:表示时钟的周期,它的原型如下:
    1. // 定义于头文件 <ratio>
    2. template<
    3.     std::intmax_t Num,
    4.     std::intmax_t Denom = 1
    5. > 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. // 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 );//改变单位
复制代码


  • 为了更加方便的进行duration对象之间的操作,类内部进行了操作符重载:
  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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表