C++11的chrono总结

C++11的chrono总结

chrono是C++11中的时间库,提供计时,时钟等功能。
chrono库主要包含了三种类型:时间间隔Duration、时钟Clocks和时间点Time point。

Douration

durqtion表示一段时间间隔,用来记录时间长度,可以表示几秒钟、几分钟或者几个小时的时间间隔,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;

用法:可通过这些常用的时间间隔类型,我们能方便在线程中使用他们,比如线程的休眠,

std::this_thread::sleep_for(std::chrono::seconds(1)); //休眠1秒
std::this_thread::sleep_for(std::chrono::milliseconds(10)); //休眠10毫秒

Time point

time_point表示一个时间点,用来获取1970.1.1以来的秒数和当前时间,可以做一些时间的比较和算术运算,可以和ctime库结合起来显示时间。
time_point必须要clock来计时,time_point有一个函数time_from_eproch()用来获得1920年1月1日到time_point时间经过的duration。
原型为:template <class Clock, class Duration=typename Clock::duration> class time_point;

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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章