C++学习笔记 C++11 std::chrono知识

来源于:https://www.cnblogs.com/jwk000/p/3560086.html,有删改

chrono是一个time library, 源于boost,现在已经是C++标准。要使用chrono库,需要#include,其所有实现均在std::chrono namespace下。 chrono是一个模版库,使用简单,功能强大,需要理解三个概念:duration、time_point、clock。

1.duration

std::chrono::duration 表示一段时间,可以表示几秒钟、几分钟或者几个小时的时间间隔。比如两个小时,12.88秒,半个时辰,一炷香的时间等等,只要能换算成秒即可。duration的原型是:

template> class duartion; 

第一个模板参数Rep是一个数值类型,表示时钟个数;第二个模板参数是一个默认模板参数std::ratio,它的原型是:

template class ratio;

它表示每个时钟周期的秒数,其中第一个模板参数Num代表分子,第二个模板参数Denom代表分母,分母默认值为1,ratio代表的是一个分子除以分母的分数值,比如ratio<1>代表一个时钟周期是一秒,ratio<60>代表了一分钟,ratio<60*60>代表了一个小时,ratio<60*60*24>代表了一天。而ratio<1,1000>代表的则是1/1000秒即一毫秒。标准库为了方便使用,就定义了一些常用的时间间隔,如时、分、秒、毫秒和纳秒,在chono命名空间下,他们的定义如下:

typedef duration > hours;
typedef duration > minutes;
typedef duration > seconds;
typedef duration  milliseconds;
typedef duration > microseconds;
typedef duration > nanoseconds;

这里需要说明一下ratio这个类模版的原型:

template  class ratio;

N代表分子,D代表分母,所以ratio表示一个分数值。

注意,我们自己可以定义Period,比如ratio<1, -2>表示单位时间是-0.5秒。

// 未完待续

2. time_point

 std::chrono::time_point 表示一个时间点,如上个世纪80年代、你的生日、今天下午、火车出发时间等,只要它能用计算机时钟表示。它用来获取1970.1.1以来的秒数和当前时间,可以做一些时间比较和算术运算,可以和ctime库结合起来显示时间。
time_point必须要clock来计时,time_point有一个函数time_from_eproch()用来获得1920年1月1日到time_point时间经过的duration。
原型为:

template  class time_point;

// 未完待续

3.Clocks

Clocks表示当前的系统时钟,内部有time_point,duation,Rep,Period等信息,主要用来获取当前时间,以及实现time_t和time_point的相互转换。
Clocks包含三种时钟:system_clock(从系统获取的时钟);steady_clock(不能被修改的时钟);high_resolution_clock(高精度时钟),
可以通过now()来获取当前时间点。通过时钟获取两个时间点之相差多少个时钟周期,我们可以通过duration_cast将其转换为其它时钟周期的duration:

std::chrono::duration_cast time.count(); //转换时间为分单位

system_clock的to_time_t方法可以将一个time_point转换为ctime,而from_time_t方法则相反,将ctime转换为time_point。

now() 当前时间time_point

to_time_t() time_point转换成time_t秒

from_time_t() 从time_t转换成time_point

典型的应用是计算时间日期:

// system_clock example
#include 
#include 
#include 
#include 

int main ()
{
  using std::chrono::system_clock;

  std::chrono::duration > one_day (1);

  system_clock::time_point today = system_clock::now();
  system_clock::time_point tomorrow = today + one_day;

  std::time_t tt;

  tt = system_clock::to_time_t ( today );
  std::cout << "today is: " << ctime(&tt);

  tt = system_clock::to_time_t ( tomorrow );
  std::cout << "tomorrow will be: " << ctime(&tt);

  return 0;
}

你可能感兴趣的:(C++学习笔记 C++11 std::chrono知识)