/* 介绍<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. php 函数集锦

    1.array_intersect_assoc()用于比较两个(或更多个)数组的键名和键值,并返回交集. <?php $a1=array("a"=>"red& ...

  2. 微信导出群记录V2.0

    作业链接:[https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/1245] 一.序 啊,忘了作业!作业内容是将东北师范大学2017级软件工 ...

  3. nginx根据url中的参数进行转发

    在实际项目中,由于https安全策略,我们无法直接跳转到我们想要跳转到的地址 例如 url:https://abc.dc.com/image?url=https://vpic.video.qq.com ...

  4. rsync命令 续集 、linux系统日志、screen工具

    1.rsync 通过服务进行监听同步: 开启服务:rsync --daemon  (默认开启873端口) 需要编辑配制文件:/etc/rsyncd.conf port=873log file=/var ...

  5. 将button或者input角变为圆弧

    style="border-radius:5px;" input框时,不能用type属性

  6. 05 ajax,jquery,xstream,json解析

    Ajax “Asynchronous Javascript And XML”(异步JavaScript和XML),把原有的技术,整合到一起           1.使用CSS和XHTML来表示.   ...

  7. C++学习(二十八)(C语言部分)之 文件操作

    复习:#define 定义一个宏#include 文件包含#if 条件防止头文件重复包含定义一个宏 判断宏是否定义 判断头文件是否包含#define _STDIO_H_#include<stdi ...

  8. THML分组元素

    学习要点:     1.分组元素总汇     2.分组元素解析 一.分组元素总汇         元素名称                                 说明             ...

  9. Math.floor(-8.5)=多少?

    Math.floor()   表示向下取整,返回double类型   (floor---地板)  Math.ceil()   表示向上取整,返回double类型    (ceil---天花板)  Ma ...

  10. LeetCode – First Missing Positive

    Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...