首页 > Coding > C++11/14 新特性 (使用 chrono 进行时间处理)

C++11/14 新特性 (使用 chrono 进行时间处理)

2017年1月3日 发表评论 阅读评论

在c++11以前,我们获取当前时间的时间戳,需要借助于第三方库,如 boost ,或者针对不同的操作做不同的处理:

而在c++11中,这个问题得到解决。 c++11 标准库中提供 chrono库,用来处理时间相关的数据。

1 duration 记录时长

duration 表示一段时间间隔。其原型:

_Rep 为一个数值类型,如 int, long, 用来表示时钟数的类型。 _Period 为一个默认的模板参数 std::ratio,表示时钟周期。 ratio的原型:

它表示一个时钟周期的秒数。_Num 代表分子,_Den代表分母,它们的比值就是一个时钟周期,可以通过调整分子与分母来表示任意一个时钟周期。如 ratio<1> 表示一个时钟周期为1秒,ratio<3600>表示一个时钟周期为1小时,ratio<1,1000>表示一个时钟周期为1毫秒,ratio<1,2>表示一个时钟周期为0.2秒,ratio<9/7>表示一个时钟周期为9/7秒。 标准库将一些常用的时钟周期做了定义:

在不同的时钟周期中,我们可以使用 chrono_cast 来进行转换。两个 duration还可以进行加减运算:

2 clocks 系统时钟

它表示当前的系统时钟:

  • system_clock : 真实时钟,它依赖于系统时间。
  • steady_clock : 稳定时钟。它不依赖于系统时间,不会因为系统时间的调整而变化。
  • high_resolution_clock : 高精度时钟。它实际上是 system_clock 或 stead_clock 的高精度版本。

它可以实现 time_t 到 time_point (见下一小节)的相互转换。

3 time_point 时间点(时间戳)

它与表示距离某个时间原点的时钟数。其原型如下:

表示距离 _Clock 有多少个 _Duration。

time_point 提供 time_point_eproch() 函数来获取从 1970年1月1日到time_point 经过的 duration. time_point 还支持加减算术运算。如果看其源码,可以发现其加减运算就是拿 duration来进行运算,故其 time_point 还可以直接和 duration 进行运算。time_point 的 '-' 的某个版本的重载如下:

示例:

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.