C++中Duration、Time_point和Clocks
C++11中的chrono库,实现时间相关的功能。
1.duration
duration表示一段时间间隔,原型是:
template<class Rep, class Period = std::ratio<1>> class duration
Rep是一个数值类型,表示时钟个数,Period表示每个时钟周期的秒数。Period的默认模板参数是std::ratio,它的原型是:
template<std::intmax_t Num, std::intmax_t Denom = 1>
class ratio
Num代表分子,Denom代表分母。ratio<1>代表一个时钟周期是一秒,ratio<60>代表了一分钟,ratio<60*60>代表一个小时,ratio<1, 1000>代表一毫秒,ratio<1, 1000000>代表一微秒,ratio<1, 1000000000>代表一纳秒。
标准库定义了一些常用的时间间隔,如下:
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,1000>> milliseconds; //毫秒
typedef duration <Rep, ratio<1,1000000>> microseconds; //微秒
typedef duration <Rep, ratio<1,1000000000>> nanoseconds; //纳秒
实例程序如下:
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
int main()
{this_thread::sleep_for(chrono::seconds(3)); //休眠3秒this_thread::sleep_for(chrono::milliseconds(100)); //休眠100毫秒cout << "Hello" << endl;getchar();return 0;
}
2.time_point
time_point表示一个时间点,原型是:
template<class _Clock, class _Duration = typename _Clock::duration>
class time_point
函数time_since_epoch()用来获取1970.1.1以来的时间。下面实例获取当前到1970.1.1有多少小时。
#include <iostream>
#include <chrono>
using namespace std;int main()
{using namespace std::chrono;time_point<system_clock, hours> h = time_point_cast<hours>(system_clock::now());cout << h.time_since_epoch().count() << " hours since epoch" << endl;getchar();return 0;
}
3.clocks
clocks表示当前的系统时钟,内部有time_point, duration, Rep, Period等信息。
clocks包含三种时钟:
- system_clock:从系统获取的时钟;
- steady_clock:不能被修改的时钟;
- high_resolution_clock:高精度时钟
实例测试这些属性
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;int main() {cout << "system_clock" << endl;cout << system_clock::period::num << endl;cout << system_clock::period::den << endl;cout << "steady = " << boolalpha << system_clock::is_steady << endl;cout << "------------------------------ " << endl;cout << "high_resolution_clock" << endl;cout << high_resolution_clock::period::num << endl;cout << high_resolution_clock::period::den << endl;cout << "steady = " << boolalpha << high_resolution_clock::is_steady << endl;cout << "------------------------------ " << endl;cout << "steady_clock" << endl;cout << steady_clock::period::num << endl;cout << steady_clock::period::den << endl;cout << "steady = " << boolalpha << steady_clock::is_steady << endl;getchar();return 0;
}
测试结果(Windows 10上,Visual Studio 2017编译)
system_clock
1
10000000
steady = false
------------------------------
high_resolution_clock
1
1000000000
steady = true
------------------------------
steady_clock
1
1000000000
steady = true
system_clock是微秒精度且可调整,steady_clock和high_resolution_clock是纳秒精度不可调整。
实例测试一段代码的执行时间。
#include <iostream>
#include <chrono>
using namespace std;
int main()
{using namespace std::chrono;steady_clock::time_point t1 = steady_clock::now();cout << "Hello World\n";steady_clock::time_point t2 = steady_clock::now();cout << duration <double, milli>(t2 - t1).count() << " tick count" << endl;getchar();return 0;
}
C++中Duration、Time_point和Clocks相关推荐
- matlab中duration是什么意思,C++ duration(STL duration)模板用法详解
duration (持续时间) 是定义为时间刻度数的时间间隔,可以指定一个时间刻度是多少秒.因此,时间刻度是衡量时间长短的基础.duration 模板的实例类型的对象定义了 duration.时间刻度 ...
- 关于MP4 fileformat中 duration及timescale相关的几个地方
http://www.cnblogs.com/goodloop/archive/2010/11/08/1872004.html 转载于:https://www.cnblogs.com/eustoma/ ...
- (原创)c++11中的日期和时间库
c++11提供了日期时间相关的库chrono,通过chrono相关的库我们可以很方便的处理日期和时间.c++11还提供了字符串的宽窄转换功能,也提供了字符串和数字的相互转换的库.有了这些库提供的便利的 ...
- 聊聊C++标准库,准标准库中关于时间的概念和用法
概要 在实际C++业务开发中,经常需要使用系统API或者标准库去获取时间,计算时间的需求,其中,时间按概念又分时间段,时间点:按表达形式又分系统时间,本地时间:其实,获取到了时间,如何通过日志的方式把 ...
- C++11 中chrono库 实现高精度定时
一种"传统"ctime计时方法: #include <ctime> using namespace std;clock_t start = clock(); // do ...
- c++中chrono学习
chrono是一个时间库,可以方便的用来计时,测量一些性能. 在chrono中,有三个概念,分别是:duration.time_point和Clocks. duration 从单词上可以看出,表示一段 ...
- C++11中的chrono库
文章目录 前言 1.记录时长的duration 2.表示时间点的time_point 3.获取系统时钟的clocks 前言 C++11提供了日期时间相关的库chrono,通过chrono库可以很方便的 ...
- TimeQuest约束外设之诡异的Create Generated Clocks用法
最近在altera FPGA里设计一个外设的驱动模块,模块本身逻辑很简单如下图所示,但是模块和外设之间的时序约束问题搞的很头疼,今天先讲讲总结的一些Timequest下外设约束方法,特别是那毫无用户体 ...
- [原创]TimeQuest约束外设之诡异的Create Generated Clocks用法
刚入驻博客园,先搬几篇之前在EDN原创的文章,EDN的链接http://bbs.ednchina.com/BLOG_13570357612_2000177.HTM 最近在altera FPGA里设计一 ...
- 房产管理系统设计html,HTML5 3D 在智慧物业/地产管理系统中的应用
概述 该博文主要展示采用 HT for Web 提供的可视化技术,对智慧房产.智慧物业相关方向的可视化呈现做的一点尝试. 传统的 智慧房产/楼宇自动化/智慧物业 常会采用 BIM(建筑信息模型 Bui ...
最新文章
- Angular5学习笔记 - 虚拟RestfulApi配置与使用(六)
- 2021操作系统知识结构图
- 爬虫工具篇 - 必会用的 6 款 Chrome 插件
- 深入理解软件和硬件(国庆精彩活动预告)
- ES10的动态导入文件
- python 图像处理_Python中的十大图像处理工具
- c语言缩写一个人的名字,用C语言输入一个人的英文名字统计个数输出
- 什么是数据库的三大范式?
- 支付宝APP支付里设置应用网关和授权回调地址是不必填的
- TCP/IP——链路层简记
- 赛效:怎么用改图宝给图片添加水印?
- python绘制曲线y=2x+5_Python绘制简易的二维图像
- 浅谈Jsch SSH2
- 复数矩阵求逆的 C 语言程序
- 三言二拍:五年有多长对牛乱弹琴 | Playinamp;#39; with IT
- 操作系统课程课程笔记
- 扬帆际海:个人如何做跨境电商
- SyncTime for Mac v3.6文件同步工具
- mybatis-plus自定义sql报错 ew.customSqlSegment
- Ubuntu22下OpenCV4.6.0+contrib模块编译安装
热门文章
- 为什么要有域名,看完你就懂了。
- 手把手系列--STM32H750移植FreeRTOS(二)--优化编译速度
- 腾讯视频、爱奇艺、豆果美食等为线下贷款中介导流、个人信息遭倒卖
- linux工作区目录,Linux(以RHEL7为例)下添加工作区的方法|| The Way To Add Workspace On Linux...
- SDUT—Python程序设计实验六(字典与集合)
- ubuntu 解包和压包.img文件
- win10桌面的计算机图标怎么删除,win10系统桌面图标小箭头去掉的操作步骤
- win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
- 《结网》@互联网产品经理改变世界 读后感
- drony+fiddler抓包