来源于: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知识相关推荐

  1. MATLAB学习笔记2:MATLAB基础知识(下)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  2. JDBC 学习笔记(一)—— 基础知识 + 分页技术

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  3. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

  4. 陈宝林《最优化理论与算法》超详细学习笔记 (二)————补充知识(凸集) 第二章 线性规划的基本性质

    陈宝林<最优化理论与算法>超详细学习笔记 (二)----补充知识 凸集 & 第二章 线性规划的基本性质 补充知识 凸集 方向与极方向 表示定理 择一定理 第一章 线性规划的基本性质 ...

  5. Linux第二周学习笔记(11)

    Linux第二周学习笔记(11) 2.17 隐藏权限lsattr_chattr chattr命令:是设置吟唱隐藏权限的命令,更改Linux文件系统上的文件属性. 参数说明: A:表示文件或目录的ati ...

  6. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

    FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...

  7. C# 学习笔记(11)蓝屏小工具

    C# 学习笔记(11)蓝屏小工具 加载界面参考 C# Winform 现代化扁平化启动界面设计https://www.bilibili.com/video/BV17E41147wM PS做一张图 70 ...

  8. 深度学习笔记(11) 超参数调试

    深度学习笔记(11) 超参数调试 1. 选择合适的范围 2. 超参数调试实践 1. 选择合适的范围 关于训练深度最难的事情之一是要处理的参数的数量 学习速率 a 到 Momentum(动量梯度下降法) ...

  9. Java编程思想学习笔记-第11章

    <?xml version="1.0" encoding="utf-8"?> Java编程思想学习笔记-第11章 Java编程思想学习笔记-第11章 ...

最新文章

  1. 某大厂程序员哀叹:千万不要从大厂往小厂跳,后悔死了!小厂只会逼迫压榨,刚来就一个劲要产出!...
  2. ‘wmic‘ 不是内部或外部命令,也不是可运行的程序 解决方法
  3. cout的输出格式初探2
  4. 【干货】运维人员常用的Linux命令汇总
  5. 使用 AppleScript 在 Chrome 中查看当前 Safari 打开的网页
  6. gif透明背景动画_常用GIF动图制作工具,抖音里面的动图都是这些工具做出来的...
  7. WinPcap笔记(6):过滤数据包
  8. linux常用调试,linux下gdb常用的调试命令
  9. IntelliJ IDEA + Maven环境编写第一个hadoop程序
  10. 利用阿里云LAMP环境搭建搭建wiki知识库
  11. How to add svn:externals in windows using TortoiseSVN
  12. html mysql查询_mysql查询
  13. 联系人存储ContactsProvider表分析
  14. Looksery Cup 2015 A. Face Detection
  15. 三维提取等值面的重建方法Marching Cubes
  16. amd raid linux驱动,AMD 磁盘阵列控制器 驱动程序下载——更新 AMD 软件
  17. 【机器学习|数学基础】Mathematics for Machine Learning系列之图论(8):割边、割集、割点
  18. 【ORACLE】从安装ORACLE LINUX 8开始构建一个ORACLE21C的docker镜像
  19. 类 ApplicationInfo详解
  20. “华为起诉美国”事件进展:美国联邦法院给美国政府发传票

热门文章

  1. excel查找出不来了_Excel查找值不唯一,一个VLOOKUP公式拖拉出多个结果啦
  2. 鼓包精灵2代的清灰与电池问题处理
  3. 将文字定位到浮动图片上|CSS
  4. HelloWord代码
  5. (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究串口通信(printf)
  6. 关于保险的基础知识总结
  7. 由于轮播图片超宽造成的影响
  8. mac 终端 创建java文件_第一个 终端Java程序 (Mac)
  9. 在chrome中屏蔽百度推荐
  10. Python3.9的69个内置函数(内建函数)介绍,并附简单明了的示例代码