/* 介绍<chrono> 

	-- 一个精确中立的时间和日期库

 * 时钟:
*
* std::chrono::system_clock: 依据系统的当前时间 (不稳定)
* std::chrono::steady_clock: 以统一的速率运行(不能被调整)
* std::chrono::high_resolution_clock: 提供最小可能的滴答周期
* (可能是steady_clock或者system_clock的typedef)
*
* std:ratio<>表示时钟周期,即时间的计量单位
*/ std::ratio<1,10> r; //
cout << r.num << "/" << r.den << endl; cout << chrono::system_clock::period::num << "/" << chrono::system_clock::period::den << endl;
cout << chrono::steady_clock::period::num << "/" << chrono::steady_clock::period::den << endl;
cout << chrono::high_resolution_clock::period::num << "/" << chrono::high_resolution_clock::period::den << endl; /*
*
* std:chrono::duration<>: 表示持续的时间
* duration<int, ratio<1,1>> -- 秒数存储在一个int中 (默认)
* duration<double, ration<60,1>> -- 分钟数储存在一个double中
* 库中定义了如下方便的duration:
* nanoseconds, microseconds, milliseconds, seconds, minutes, hours
* system_clock::duration -- duration<T, system_clock::period>
* T是一个有符号的算术类型, 可以是int或long或其他
*/
chrono::microseconds mi(2745);
chrono::nanoseconds na = mi;
chrono::milliseconds mill = chrono::duration_cast<chrono::milliseconds>(mi); // 当可能发生信息丢失的时候,要显式地转换
// 直接截断,而不是四舍五入
mi = mill + mi; // 2000 + 2745 = 4745
mill = chrono::duration_cast<chrono::milliseconds>(mill + mi); // 6
cout << na.count() << std::endl;
cout << mill.count() << std::endl;
cout << mi.count() << std::endl; cout << "min: " << chrono::system_clock::duration::min().count() << "\n";
cout << "max: " << chrono::system_clock::duration::max().count() << "\n"; /* std::chrono::time_point<>: 表示一个时间点
* -- 自从一个指定的时间点开始的过去的时间长度:
* 00:00 January 1, 1970 (Corordinated Universal Time - UTC) -- 时钟的纪元
* time_point<system_clock, milliseconds>: 依据system_clock, 自从纪元开始经过的毫秒数
*
* typdefs
system_clock::time_point -- time_point<system_clock, system_clock::duration>
steady_clock::time_point -- time_point<steady_clock, steady_clock::duration>
*/
// 使用系统时间
chrono::system_clock::time_point tp = chrono::system_clock::now();
cout << tp.time_since_epoch().count() << endl;
tp = tp + seconds(2); // 因为tp精度高,不需要转换
cout << tp.time_since_epoch().count() << endl; // 计算时间间隔最好用steady_clock
chrono::steady_clock::time_point start = chrono::steady_clock::now();
cout << "I am bored" << endl;
chrono::steady_clock::time_point end = chrono::steady_clock::now();
chrono::steady_clock::duration d = end - start;
if (d == chrono::steady_clock::duration::zero()) //0时间长度的表示
cout << "no time elapsed" << endl;
cout << duration_cast<microseconds>(d).count() << endl;
// 使用system_clock可能得到不正确的值

C++11--时钟和计时器<chrono>的更多相关文章

  1. Linux 时钟与计时器

    对 Linux 系统来说,时钟和计时器是两个十分重要的概念.时钟反应的是绝对时间,也可认为是实时时间.计时器反应的则是相对时间,即相对于系统启动后的计时.操作系统内核需要管理运行时间(uptime)和 ...

  2. c++11 时间类 std::chrono

    概念: chrono库:主要包含了三种类型:时间间隔Duration.时钟Clocks和时间点Time point. Duration:表示一段时间间隔,用来记录时间长度,可以表示几秒钟.几分钟或者几 ...

  3. rtems 4.11 时钟驱动(arm, beagle)

    根据bsp_howto手册,时钟驱动的框架主要在 c/src/lib/libbsp/shared/Clockdrv_shell.h 文件中实现 时钟初始化 时钟驱动初始化函数为 Clock_initi ...

  4. C++11 std::chrono库详解

    所谓的详解只不过是参考www.cplusplus.com的说明整理了一下,因为没发现别人有详细讲解. chrono是一个time library, 源于boost,现在已经是C++标准.话说今年似乎又 ...

  5. C++11 标准库也有坑(time-chrono)

    恰巧今天调试程序遇到时间戳问题, 于是又搜了搜关于取时间戳,以及时间戳转字符串的问题, 因为 time()   只能取到秒(win和linux) 想试试看能不能找到 至少可以取到毫秒的, 于是, 就找 ...

  6. (原创)c++11中的日期和时间库

    c++11提供了日期时间相关的库chrono,通过chrono相关的库我们可以很方便的处理日期和时间.c++11还提供了字符串的宽窄转换功能,也提供了字符串和数字的相互转换的库.有了这些库提供的便利的 ...

  7. verilog实现毫秒计时器

    verilog实现毫秒计时器 整体电路图 实验状态图 Stop代表没有计时,Start代表开始计时,Inc代表计时器加1,Trap代表inc按钮按下去时候的消抖状态. 状态编码表 实验设计思路 时钟分 ...

  8. C++中头文件简介(stdio.h & chrono)

    参考: 1. https://baike.baidu.com/item/stdio.h 2. https://www.cnblogs.com/jwk000/p/3560086.html 1. stdi ...

  9. Boost Replaceable by C++11 language features or libraries

    Replaceable by C++11 language features or libraries Foreach → Range-based for Functional/Forward → P ...

随机推荐

  1. 区块链与Git版本工具的比较

    区块链与Git版本工具的比较 来源:http://www.jianshu.com/p/b96b98983df6 作者: 梁波林  相同点: 1. 分布式存储方案 2. 链式数据 3. 去中心化 4. ...

  2. matlab学习(2) sort、sortrows

    1.sort函数 对于向量,sort(X)把向量的元素按照从小到大排序: 对于矩阵,sort(X)按照从小到大顺序对矩阵每一列进行排序:sort(X,2)按照行排序 对于字符串的元胞数组,sort(X ...

  3. ORB(oriented FAST and rotated BRIEF)特征提取与检测

    ORB采取FAST算法检测特征点,采取BRIEF算法计算特征点描述子. 1.检测特征点 检测候选特征点周围一圈的像素值,若有足够多的像素值与候选特征点的差异都较大,则认为该候选特征点是特征点. 对于上 ...

  4. 最长公共子序列与最长公共字串 (dp)转载http://blog.csdn.net/u012102306/article/details/53184446

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  5. const 和let的本质区别

    在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量. const优于let有几个原因.一个是const可以提醒阅读程序的人,这个变量不应该改变:另一个是c ...

  6. 2018.4.17 VFS

    总结: VFS只存在于内存中,它在系统启动时被创建,系统关闭时注销. VFS的作用就是屏蔽各类文件系统的差异,给用户.应用程序.甚至Linux其他管理模块提供统一的接口集合. 管理VFS数据结构的组成 ...

  7. 2017.4.4 TCP/IP三次握手,四次挥手

    之前在电话面试的时候,被问到,所以找到一个超级容易理解的图片,自己保存,也算分享.

  8. webapi core2.1 Identity.EntityFramework Core进行配置和操作数据 (一)没什么用

    https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.1&am ...

  9. 鸟哥的linux私房菜第4版--自学笔记

    -----------------------------------第一章 intel芯片架构 PS:升级电脑还得看看主板是不是适合CPU,主板适合CPU的类型是有限的PS: 现在已经没有北桥了,已 ...

  10. 反射,内省,BeanUtil的区别

    PS:为了操作反射方便,sun创建了 内省, Apache闲麻烦自己创建了BeanUtils 1.开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所 ...