C++11 时间日期库 chrono 的使用
chrono 是 C++11 中新加入的时间日期操作库,可以方便地进行时间日期操作,主要包含了:duration, time_point, clock。
时钟与时间点
chrono 中用 time_point 模板类表示时间点,其支持基本算术操作;不同时钟 clock 分别返回其对应类型的时间点。
clock
时钟是从一个时点开始,按照某个刻度的计数;chrono 同时提供了三种时钟(通过 now()获取当前时间点):
system_clock:系统时钟,相对 epoch(1970-01-01 00:00:00UTC)的时间间隔;
steady_clock:单调时钟,只能增长(后一次调用 now()得到的时间总是比前一次的值大);一般是相对于系统启动时间的时间间隔;
high_resolution_clock:高精度时钟(当前系统能提供的最高精度时钟,很可能就是 steady_clock),也是单调的;
需要得到绝对时点的场景使用 system_clock;需要得到时间间隔,且不受系统时间修改而受影响时使用 steady_clock。
时间显示
在 C++20 中直接有 to_stream 直接输出 system_clock 时钟;但在此之前,只能通过间接的方式来输出:
system_clock::from_time_t(...)可以把 time_t 类型时间转换为 time_point,便于 chrono 使用。
运行计时
通过 steady_clock/high_resolution_clock 可方便的进行计时:
时间间隔 duration
chrono 中使用 duration 模板类来表示时间间隔,并定义了从小时到纳秒的时间间隔。
duration 模板
duration 使用一个数值(表示时钟数)和分数(ratio)来表示具体间隔。支持基本的算术运算,并通过 count()获取具体的时钟数。
基准是秒,并依次定义了常用的间隔,如:
不同的时间间隔可以直接进行算术运算,如休眠需要毫秒参数,我们可以封装接收秒与毫秒的接口:
duration_cast
使用 duration_cast 可以方便的在不同时间单位间进行转换,如:
ratio
ratio 是一个分数模板类,第一个参数为分子,第二个参数为分母;通过静态成员可获取:
num:分子
den:分母
版权声明: 本文为 InfoQ 作者【向阳逐梦】的原创文章。
原文链接:【http://xie.infoq.cn/article/bc891ca7715d0d149a723d8a4】。文章转载请联系作者。
评论