C++11--时钟和计时器<chrono>
/* 介绍<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>的更多相关文章
- Linux 时钟与计时器
对 Linux 系统来说,时钟和计时器是两个十分重要的概念.时钟反应的是绝对时间,也可认为是实时时间.计时器反应的则是相对时间,即相对于系统启动后的计时.操作系统内核需要管理运行时间(uptime)和 ...
- c++11 时间类 std::chrono
概念: chrono库:主要包含了三种类型:时间间隔Duration.时钟Clocks和时间点Time point. Duration:表示一段时间间隔,用来记录时间长度,可以表示几秒钟.几分钟或者几 ...
- rtems 4.11 时钟驱动(arm, beagle)
根据bsp_howto手册,时钟驱动的框架主要在 c/src/lib/libbsp/shared/Clockdrv_shell.h 文件中实现 时钟初始化 时钟驱动初始化函数为 Clock_initi ...
- C++11 std::chrono库详解
所谓的详解只不过是参考www.cplusplus.com的说明整理了一下,因为没发现别人有详细讲解. chrono是一个time library, 源于boost,现在已经是C++标准.话说今年似乎又 ...
- C++11 标准库也有坑(time-chrono)
恰巧今天调试程序遇到时间戳问题, 于是又搜了搜关于取时间戳,以及时间戳转字符串的问题, 因为 time() 只能取到秒(win和linux) 想试试看能不能找到 至少可以取到毫秒的, 于是, 就找 ...
- (原创)c++11中的日期和时间库
c++11提供了日期时间相关的库chrono,通过chrono相关的库我们可以很方便的处理日期和时间.c++11还提供了字符串的宽窄转换功能,也提供了字符串和数字的相互转换的库.有了这些库提供的便利的 ...
- verilog实现毫秒计时器
verilog实现毫秒计时器 整体电路图 实验状态图 Stop代表没有计时,Start代表开始计时,Inc代表计时器加1,Trap代表inc按钮按下去时候的消抖状态. 状态编码表 实验设计思路 时钟分 ...
- C++中头文件简介(stdio.h & chrono)
参考: 1. https://baike.baidu.com/item/stdio.h 2. https://www.cnblogs.com/jwk000/p/3560086.html 1. stdi ...
- Boost Replaceable by C++11 language features or libraries
Replaceable by C++11 language features or libraries Foreach → Range-based for Functional/Forward → P ...
随机推荐
- 基于hiredis,redis C客户端封装
项目中需要用到redis就封装了一下,基于hiredis,只封装了string和哈希的部分方法.编译时加入-D__USER_LOCK__添加线程安全. suntelRedisCli.h #ifndef ...
- unity ugui Toggle Group详解(Chinar出品、简单易懂)
UGUI Toggle Group用法教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...
- hdoj-1114 (背包dp)
题目链接 题意:已知n种coin的价值和体积 求装满容量为v背包的最小硬币价值 #include <algorithm> #include <cstdio> #include ...
- 论文阅读理解 - Stacked Hourglass Networks for Human Pose Estimation
http://blog.csdn.net/zziahgf/article/details/72732220 keywords 人体姿态估计 Human Pose Estimation 给定单张RGB图 ...
- Prime Test(POJ 1811)
素数判定的模板题,运用米勒-罗宾素数判定,然后用Pollard_Rho法求出质因数.使用相应的模板即可,不过注意存储质因子的数组需要使用vector,并且使用long long类型存储,不然存储不下, ...
- BootStrap------之模态框1
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...
- python列表复习
列表的切片 >>> name = list()>>> name.extend(range(100))>>> name[0, 1, 2, 3, 4, ...
- SPOJ NSUBSTR Substrings
题意 dt { font-weight: bold; margin-top: 20px; padding-left: 35px; } dd { box-shadow: 3px 3px 6px #888 ...
- 这样学习C语言最有效(高级技巧)——共勉
第一章 学习C语言的起跑线 1.1 C语言已死? 本资料描述的是使用C语言的高级技巧,力求将你的C语言能力由"基础"提升为"高级".但是学习态度胜过学习方法,在 ...
- zeebe 为微服务架构的工作流引擎
zeebe 是灵活.轻量的基于微服务架构的工作流引擎 包含以下特性: 可视化的额工作流 审计日志以及历史 水平缩放 持久化&&容错 消息驱动 操作容易 语言无关 工作流基于标准bpmn ...