C++学习笔记 C++11 std::chrono知识
来源于:https://www.cnblogs.com/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()用来获得1920年1月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知识相关推荐
- MATLAB学习笔记2:MATLAB基础知识(下)
阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...
- JDBC 学习笔记(一)—— 基础知识 + 分页技术
2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" ...
- 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符
Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...
- 陈宝林《最优化理论与算法》超详细学习笔记 (二)————补充知识(凸集) 第二章 线性规划的基本性质
陈宝林<最优化理论与算法>超详细学习笔记 (二)----补充知识 凸集 & 第二章 线性规划的基本性质 补充知识 凸集 方向与极方向 表示定理 择一定理 第一章 线性规划的基本性质 ...
- Linux第二周学习笔记(11)
Linux第二周学习笔记(11) 2.17 隐藏权限lsattr_chattr chattr命令:是设置吟唱隐藏权限的命令,更改Linux文件系统上的文件属性. 参数说明: A:表示文件或目录的ati ...
- FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析
FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...
- C# 学习笔记(11)蓝屏小工具
C# 学习笔记(11)蓝屏小工具 加载界面参考 C# Winform 现代化扁平化启动界面设计https://www.bilibili.com/video/BV17E41147wM PS做一张图 70 ...
- 深度学习笔记(11) 超参数调试
深度学习笔记(11) 超参数调试 1. 选择合适的范围 2. 超参数调试实践 1. 选择合适的范围 关于训练深度最难的事情之一是要处理的参数的数量 学习速率 a 到 Momentum(动量梯度下降法) ...
- Java编程思想学习笔记-第11章
<?xml version="1.0" encoding="utf-8"?> Java编程思想学习笔记-第11章 Java编程思想学习笔记-第11章 ...
最新文章
- 某大厂程序员哀叹:千万不要从大厂往小厂跳,后悔死了!小厂只会逼迫压榨,刚来就一个劲要产出!...
- ‘wmic‘ 不是内部或外部命令,也不是可运行的程序 解决方法
- cout的输出格式初探2
- 【干货】运维人员常用的Linux命令汇总
- 使用 AppleScript 在 Chrome 中查看当前 Safari 打开的网页
- gif透明背景动画_常用GIF动图制作工具,抖音里面的动图都是这些工具做出来的...
- WinPcap笔记(6):过滤数据包
- linux常用调试,linux下gdb常用的调试命令
- IntelliJ IDEA + Maven环境编写第一个hadoop程序
- 利用阿里云LAMP环境搭建搭建wiki知识库
- How to add svn:externals in windows using TortoiseSVN
- html mysql查询_mysql查询
- 联系人存储ContactsProvider表分析
- Looksery Cup 2015 A. Face Detection
- 三维提取等值面的重建方法Marching Cubes
- amd raid linux驱动,AMD 磁盘阵列控制器 驱动程序下载——更新 AMD 软件
- 【机器学习|数学基础】Mathematics for Machine Learning系列之图论(8):割边、割集、割点
- 【ORACLE】从安装ORACLE LINUX 8开始构建一个ORACLE21C的docker镜像
- 类 ApplicationInfo详解
- “华为起诉美国”事件进展:美国联邦法院给美国政府发传票