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 ...
随机推荐
- C5-fasterrcnn-小象cv-code
1.# Path to Shapes trained weightsSHAPES_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_shapes. ...
- C语言--第二周作业评分和总结(5班)
作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1026 一.评分要求 要求1 阅读指定博客+阅读收获+例子.(5分) 要求2 ...
- Java之从头开始编写简单课程信息管理系统
编写简单的课程管理系统对于新手并不友好,想要出色的完成并不容易以下是我的一些经验和方法 详情可参考以下链接: https://www.cnblogs.com/dream0-0/p/10090828.h ...
- 欧拉函数 已经优化到o(n)
欧拉函数 ψ(x)=x*(1-1/pi) pi为x的质数因子 特殊性质(图片内容就是图片后面的文字) 欧拉函数是积性函数——若m,n互质, ψ(m*n)=ψ(m)*ψ(n): 当n为奇数时, ψ ...
- 【java编程】加载Resources配置文件的方法
一.加载配置实现k-v //FILTER_PROPERTY_NAME=META-INF/abc.properties private void loadFilterConfig(Properties ...
- Yocto学习笔记
1. 指定SRCREV的例子 #kernel-module-m8887-wlan.bb DESCRIPTION = "Marvell M8887 Wifi kernel module&quo ...
- pycharm 的操作1
- c# AddMonths,你了解吗?
AddMonths:找到对应月的day,如果没有则取最后一个day var d1 = new DateTime(2017, 6, 30); var d2 = d1.AddMonths(-1);//20 ...
- c# 数据类型可在在最后的带一个字母
folat的后面要带F或者f: double的后面要带D或者d: decimal的后面要带M或者m: long的后面要带L或者l:
- 关于 php json float 出现很多位的问题
关于 php json float 出现很多位的问题 serialize_precision http://php.net/manual/en/ini.list.php https://wiki.ph ...