失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C++学习笔记 C++11 std::chrono知识

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

时间:2020-12-25 22:28:43

相关推荐

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

来源于:/jwk000/p/3560086.html,有删改

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

1.duration

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

template<class Rep, class Period=std::ratio<1>> class duartion;

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

template<std::intmax_t Num, std::intmax_t Denom=1> 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 <Rep, ratio<3600,1>> hours;typedef duration <Rep, ratio<60,1>> minutes;typedef duration <Rep, ratio<1,1>> seconds;typedef duration <Rep, ratio<1,10000> milliseconds;typedef duration <Rep, ratio<1,1000000>> microseconds;typedef duration <Rep, ratio<1,1000000000>> nanoseconds;

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

template <intmax_t N, intmax_t D = 1> 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()用来获得191月1日到time_point时间经过的duration。

原型为:

template <class Clock, class Duration=typename Clock::duration> 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<std::chrono::mintes> 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 <iostream>#include <ctime>#include <ratio>#include <chrono>int main (){using std::chrono::system_clock;std::chrono::duration<int,std::ratio<60*60*24> > 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知识》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。