std::chrono笔记
文章目录
- 1. radio
- 原型
- 作用
- 示例
- 2. duration
- 原型:
- 作用
- 示例
- 3. time_point
- 原型
- 作用
- 示例
- 4. clocks
- system_clock
- 示例
- steady_clock
- 示例
- high_resolution_clock
先说感觉,这个库真恶心,刚接触感觉跟shi一样,特别是那个命名空间,太长了。
就像这样:
后来感觉设计还挺巧妙,才觉得看起来顺眼一些。
1. radio
原型
template <intmax_t N, intmax_t D = 1> class ratio;
作用
时间换算的比率 / 表示时间精度。
ratio
是一个比率的模板(分子/分母)。第一个模板参数是分子,第二个模板参数是分母,也可以只提供第一个,这样分母默认是0。主要用来表示精度、
可以把它当成一个分数,仅有ratio
我们是做不了什么的。
示例
ratio<60, 1> minute;ratio<1, 1> second;ratio<1, 1000> millisecond;
当然,头文件有预定义的例子,可以参考:
typedef ratio<1, 1000000000000000000> atto;typedef ratio<1, 1000000000000000> femto;typedef ratio<1, 1000000000000> pico;typedef ratio<1, 1000000000> nano;typedef ratio<1, 1000000> micro;typedef ratio<1, 1000> milli;typedef ratio<1, 100> centi;typedef ratio<1, 10> deci;typedef ratio< 10, 1> deca;typedef ratio< 100, 1> hecto;typedef ratio< 1000, 1> kilo;typedef ratio< 1000000, 1> mega;typedef ratio< 1000000000, 1> giga;typedef ratio< 1000000000000, 1> tera;typedef ratio< 1000000000000000, 1> peta;typedef ratio< 1000000000000000000, 1> exa;
2. duration
原型:
template <class Rep, class Period = ratio<1> > class duration;
构造函数(想快点理解话,主要看第4个):
(1)duration() = default; //默认构造
(2)duration (const duration& dtn); //(2)(3)拷贝构造
(3)template<class Rep2, class Period2>constexpr duration (const duration<Rep2,Period2>& dtn);
(4)template<class Rep2> //传递一个某类型(int等)的数值,构造一个时间段 constexpr explicit duration (const Rep2& n);
作用
表示一段时间。
第一个模板参数Rep
可以是int、float、double,第二个模板参数Period
用来表示精度。Rep
表示Period
的数目。
duration
模板中的方法count
用来返回Period
的数量,返回值是Rep
类型。
不同类型的duration
之间的转换用duration_cast<>
,原型如下:
template <class ToDuration, class Rep, class Period>
constexpr ToDuration
duration_cast (const duration<Rep,Period>& dtn);
示例
#include <iostream>
#include <chrono>
#include <ctime>using namespace std;
using namespace chrono;int main (void)
{using seconds_type = duration<int, ratio<1, 1>>;using minutes_type = duration<int, ratio<60, 1>>;using hours_type = duration<int, ratio<3600, 1>>;using milliseconds_type = duration<int, ratio<1, 1000>>;seconds_type oneday_seconds (3600 * 24);hours_type oneday_hours (24);minutes_type oneday_minutes (60 * 24);milliseconds_type oneday_milliseconds (3600 * 24 * 1000);cout << "一天的秒数: " << oneday_seconds.count() << endl;cout << "一天的小时数: " << oneday_hours.count() << endl;cout << "一天的分钟数: " << oneday_minutes.count() << endl;cout << "一天的毫秒数: " << oneday_milliseconds.count() << endl;hours_type oneday_hours_from_milliseconds = duration_cast<hours_type> (oneday_milliseconds);hours_type oneday_hours_from_seconds = duration_cast<hours_type> (oneday_seconds);hours_type oneday_hours_from_miniues = duration_cast<hours_type> (oneday_minutes);cout << "转换后>>" << endl;cout << "一天的小时数:" << oneday_hours_from_milliseconds.count() << endl;cout << "一天的小时数:" << oneday_hours_from_seconds.count() << endl;cout << "一天的小时数:" << oneday_hours_from_miniues.count() << endl;cout << "一天的秒数:" << duration_cast<seconds_type> (oneday_milliseconds).count() << endl;cout << "一天的秒数:" << duration_cast<seconds_type> (oneday_minutes).count() << endl;cout << "一天的秒数:" << duration_cast<seconds_type> (oneday_hours).count() << endl;cout << "一天的毫秒数:" << duration_cast<milliseconds_type> (oneday_seconds).count() << endl;cout << "一天的毫秒数:" << duration_cast<milliseconds_type> (oneday_minutes).count() << endl;cout << "一天的毫秒数:" << duration_cast<milliseconds_type> (oneday_hours).count() << endl;
}
打印结果:
一天的秒数: 86400
一天的小时数: 24
一天的分钟数: 1440
一天的毫秒数: 86400000
转换后>>
一天的小时数:24
一天的小时数:24
一天的小时数:24
一天的秒数:86400
一天的秒数:86400
一天的秒数:86400
一天的毫秒数:86400000
一天的毫秒数:86400000
一天的毫秒数:86400000
也可以用头文件中预定义的:
/// nanosecondsusing nanoseconds = duration<_GLIBCXX_CHRONO_INT64_T, nano>;/// microsecondsusing microseconds = duration<_GLIBCXX_CHRONO_INT64_T, micro>;/// millisecondsusing milliseconds = duration<_GLIBCXX_CHRONO_INT64_T, milli>;/// secondsusing seconds = duration<_GLIBCXX_CHRONO_INT64_T>;/// minutesusing minutes = duration<_GLIBCXX_CHRONO_INT64_T, ratio< 60>>;/// hoursusing hours = duration<_GLIBCXX_CHRONO_INT64_T, ratio<3600>>;......
3. time_point
原型
template <class Clock, class Duration = typename Clock::duration>class time_point;
另外看一下system_clock
中内容:
struct system_clock{typedef chrono::nanoseconds duration;typedef duration::rep rep;typedef duration::period period;typedef chrono::time_point<system_clock, duration> time_point;...
标准库有三种钟:system_clock
,steady_clock
和high_resolution_clock
。
可以看出system_clock::time_point
默认用的钟是system_clock
,duration
是纳秒级别的nanoseconds
。
同时,为了转换不同的time_point
,还提供了time_point_cast
:
template <class ToDuration, class Clock, class Duration>
time_point<Clock,ToDuration>
time_point_cast (const time_point<Clock, Duration>& tp);
作用
表示时间点,一个time point必须有一个clock计时
示例
- 打印
system_clock::time_point tp_epoch;time_point<system_clock, seconds> tp_seconds (seconds (1));time_point<//默认的time_point是纳米级:system_clock::time_point tp (tp_seconds);printf ("system_clock中,一秒对应%d个时钟周期\n",tp.time_since_epoch().count() );system_clock::time_pointtime_t time = system_clock::to_time_t (tp);printf ("tp的打印结果:%s", ctime (&time));
打印结果:
system_clock中,一秒对应1000000000个时钟周期
tp的打印结果:Thu Jan 1 08:00:01 1970
- 转换
using days_type = duration<int, ratio<3600 * 24>>;time_point<system_clock, days_type> today= time_point_cast<days_type> (system_clock::now());printf ("从epoch到现在的天数: %d", today.time_since_epoch().count());
打印结果:
从epoch到现在的天数: 19415
到这里应该更能体会到,那个ratio<3600 * 24>
,表示一个单位,int
其实是单位的数量,整体看起来就是一段时间,只不过这段时间的精度是按天来算的,且数目是int
类型。
4. clocks
system_clock
system_clock
表示当前的系统时钟,系统中运行的所有进程使用now()
得到的时间是一致的。
每一个clock类中都有确定的time_point
, duration
, Rep
, Period
类型。
操作有:
now()
- 当前时间
time_point
- 当前时间
to_time_t()
- 将
time_point
转换成time_t
秒
- 将
from_time_t()
- 从
time_t
转换成time_poin
- 从
示例
计算时间日期
#include <iostream>
#include <chrono>
#include <ctime>
#include <fmt/format.h>using namespace std;
using namespace chrono;int main (void)
{using days_type = duration<int, ratio<3600 * 24>>;days_type one_day (1);system_clock::time_point today = system_clock::now();system_clock::time_point tomorrow = today + one_day;time_t time = system_clock::to_time_t (today);printf ("今天是:%s", ctime (&time));time = system_clock::to_time_t (tomorrow);printf ("明天是:%s", ctime (&time));
}
steady_clock
steady_clock
为了表示稳定的时间间隔,后一次调用now()
得到的时间总是比前一次的值大(这句话的意思其实是,如果中途修改了系统时间,也不影响now()
的结果),每次tick
都保证过了稳定的时间间隔。
操作有:
now()
- 获取当前时钟
示例
典型的应用是给算法计时。
#include <iostream>
#include <chrono>
#include <ctime>
#include <fmt/format.h>using namespace std;
using namespace chrono;int main (void)
{steady_clock::time_point t1 = steady_clock::now();cout << "打印1000个 *" << endl;for (int i = 0; i < 1000; ++i)cout << "*";cout << endl;steady_clock::time_point t2 = steady_clock::now();duration<double> time = duration_cast<duration<double>> (t2 - t1);cout << "花费的秒数:" << time.count() << endl;
}
*************************************...
花费的秒数:9.3816e-05
high_resolution_clock
最后一个时钟,high_resolution_clock
顾名思义,这是系统可用的最高精度的时钟。实际上high_resolution_clock
只不过是system_clock
或者steady_clock
的typedef
。
操作有:
now()
- 获取当前时钟。
参考博客:
C++11 std::chrono库详解
c++11 chrono全面解析(最高可达纳秒级别的精度)
相关文章:
std::chrono笔记
文章目录1. radio原型作用示例2. duration原型:作用示例3. time_point原型作用示例4. clockssystem_clock示例steady_clock示例high_resolution_clock先说感觉,这个库真恶心,刚接触感觉跟shi一样,特别是那个命名空间,太…...
接收arp请求并发送回应的实例
本文简单介绍了arp协议,用一个实例查看收到的ARP请求,并对该请求发出ARP回应,实例有完整的源代码,使用C语言在Linux下实现,代码中有详细的注释。 1. ARP协议 ARP(Address Resolution Protocol),地址解析协议;在局域网上通过IP地址获取物理地址MAC的协议,该协议工作在数…...
【高性能计算】TVM使用TE手动优化矩阵乘法算法解析与代码解读
引言 注:本文主要介绍、解释TVM的矩阵优化思想、代码,需要配合代码注释一起阅读。 矩阵乘法是计算密集型运算。为了获得良好的 CPU 性能,有两个重要的优化措施: 提高内存访问的高速缓存命中率。复杂的数值计算和热点内存&#x…...
消息中间件的概念
中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的…...
窃密恶意软件Raccoon最新样本Stealer v2分析
Raccoon 是一个恶意软件家族,2019 年来一直在地下犯罪论坛中以恶意软件即服务的身份进行售卖。2022 年 7 月,该恶意软件家族发布了 C 语言编写的新版本 Raccoon Stealer v2,打破了以往使用 C 开发的传统。 Raccoon 是一个信息窃密恶意软件&a…...
足球俱乐部管理系统
技术:Java、JSP等摘要:网站是一种主要的渠道。人们通过互联网快速、准确的发布信息、获取信息。而足球俱乐部是足球职业化、专业化的一个标志,是足球运动员以足球谋生时,所被聘用的机构,应运时代发展,规模、…...
2023上半年数学建模竞赛汇总(比赛时间、难易程度、含金量、竞赛官网)
1、美国大学生数学建模竞赛等级:国家级是否可跨校:否竞赛开始时间:2月17日~2月21日综合难度:⭐⭐⭐⭐ 竞赛含金量:⭐⭐⭐⭐⭐竞赛官网:https://www.comap.com/2、MathorCup高校数学建模挑战赛---大数据竞赛…...
【python学习笔记】:PHP7 Null合并运算符
在PHP7,一个新的功能,空合并运算符(??)已被引入。它被用来代替三元运算并与 isset()函数功能结合一起使用。如果它存在并且它不是空的,空合并运算符返回它的第一个操作数;否则返回第二个操作数。 示例 <?php// fetch the value of $_…...
数据结构与算法——3.时间复杂度分析1(概述)
前面我们已经介绍了,研究算法的最终目的是如何花费更少的时间,如何占用更少的内存去完成相同的需求,并且也通过案例演示了不同算法之间时间耗费和空间耗费上的差异,但我们并不能将时间占用和空间占用量化。因此,接下来…...
FPGA学习之日常工作复位电路
最近一个多月没有写博客了,然后最近工作中也遇到一个复位信号的问题。问题是这样的,关于外部复位信号,之前我们的处理方式都是通过PLL产生的Lock信号作为内部的复位信号。但是由于换到A54上面没有IP核,所以只有不用PLL,…...
【洛谷 P1177】【模板】快速排序 题解(快速排序+指针)
【模板】快速排序 题目描述 利用快速排序算法将读入的 NNN 个数从小到大排序后输出。 快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C 选手请不要试图使用 STL,虽然你可以…...
Pthon--自动化实用技巧篇--文件目录处理
为什么要讲这一篇,主要是因为这个在自动化测试框架或者脚本的编写的时候会用到,还是比较方便的。看上述两个函数。getcwd()、chdir()。使用 os.getcwd() 函数获得当前工作目录。使用 os.chdir()函数改变当前工作目录。所以在用chdir()函数的时候别忘记指…...
想招到实干派程序员?你需要这种面试法
技术招聘中最痛的点其实是不精准。技术面试官或CTO们常常会向我们吐槽: “我经常在想,能不能把我们项目中的代码打印出来,作为候选人的面试题的一部分?” “能不能把一个Bug带上环境,让候选人来试试怎么解决…...
cesium常见操作:鼠标点击获取对象
目录 一、viewer.scene.pick(获取Cartesian2) 二、 viewer.scene.pickPosition(获取Cartesian3) 三、viewer.scene.drillPick(穿透拾取,获取所有对象) 四、viewer.scene.globe.pick…...
【玩转c++】git的安装和使用以及可视化处理
本期主题:git的安装和使用(windows环境)博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题 小编的能力有限,出现错误希望大家不吝赐1.两个工具介绍第一个工具git,链接gitee或者github等代码托…...
第三阶段02-Mybatis框架
Mybatis框架 Mybatis框架是目前最流行的数据持久层框架, 使用Mybatis框架可以帮助程序员自动生成JDBC代码, 程序员只需要通过注解或xml配置文件提供需要执行的SQL语句,以及对象和表的映射关系, Mybatis框架会根据此映射关系和SQL自动生成出JDBC代码,从而提高开发效率 Mybatis框…...
基于超像素的多视觉特征图像分割算法研究
0.引言 背景: 经典聚类算法:Kmeans、FCM 现有问题: 1)现有算法大都是基于单一的视觉特征而设计的,eg:基于颜色特征的分割。 2)没有考虑像素周围的空间信息;分割结果:多噪…...
mysql的三大日志
摘自https://blog.csdn.net/chuige2013/article/details/123027580 一. 初步认识 binlog二进制日志 redolog undolog 二. binlog binlog记录写入行操作 作用 1)、主从复制:在Master端开启binlog,然后将binlog发送到各个Slave端,S…...
API接口及社区电子商务化的解释
API是应用程序的开发接口,在开发程序的时候,我们有些功能可能不需要从到到位去研发,我们可以拿现有的开发出来的功能模块来使用,而这个功能模块,就叫做库(libary)。比如说:要实现数据传输的安全,…...
[蓝帽杯 2021]One Pointer PHP
知识点:php 数组整型溢出,open_basedir 绕过分析 利用数组整型溢出绕过,因为PHP 会对溢出的数字处理为 float 类型。 <?php include "user.php"; if($userunserialize($_COOKIE["data"])){$count[$user->count]…...
【JAVA】xxl-job服务搭建
xxl-job服务搭建 1.下载xxl-job项目 https://github.com/xuxueli/xxl-job 2.数据库表创建 3.修改配置 注意:这是两个项目,一个是xxl-job前台,一个是xxl-job执行器,找到这两个项目得配置文件,修改配置。 配置文件地址…...
毕业设计 基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线设计
基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线设计1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STM32F103C8T6核心系统电路设计2.2心率检测电路设计2.3 TFT2.4寸彩屏电路设计3、部分代码展示3.1 ADC初始化3.2 获取ADC采样值3.3 LCD引脚初始化3.3 在LCD指定位置显…...
【10k~30k的区别】=== 功能测试、自动化测试、性能测试的区别
按测试执行的类型来分:功能测试、自动化测试、性能测试 1.功能测试 功能测试俗称点点点测试。初级测试人员的主要测试任务就是执行测试工程师所写的测试用 例,记录用例的执行状态及bug情况。与开发人员进行交互直到bug被修复。 功能测试理论…...
《MySQL学习》 索引失效的三种特殊情况
一.条件字段使用函数 explain select * from bpm_proc_instance bpi where CREATED_AT > 2022-06-01 CREATED_AT 字段建立了索引,此时explain分析的结果表明能使用到索引 但如果我们对 CREATED_AT 字段使用函数 explain select * from bpm_proc_instance bpi w…...
wafw00f 防火墙探测
kali机器自带防火墙探测工具wafw00,它可以通过发送正常以及不正常甚至包含恶意代码的HTTP请求,来探测网站是否存在防火墙,并识别防火墙的厂商及类型。安装:git clone https://github.com/EnableSecurity/wafw00f.git python setup…...
MySQL学习(1)[参考书籍:mysql是怎么运行的]
目录 一、mysql设计模式和技术 二、mysql服务器和客户端 启动mysql服务 启动mysql客户端程序 三、mysql存储引擎 四、mysql配置 五、mysql系统变量 六、mysql字符集 编码和解码: 常见字符集(五种): 相关概念࿱…...
用Python制作邮件检测器
github地址: https://github.com/CaLlMeErIC/MailDetective 因为需求需要写一个简单的邮件检测系统的框架,这里记录下思路 首先第一反应,这个检测系统不应该是各个邮件收件系统都有自带的吗,于是搜索了下是否有相关的邮件检测开源软件&#…...
K8S---pod基础概念
目录 一、资源限制 二、Pod 的两种使用方式 三、Pod 资源共享 四、底层容器Pause 1、Pause共享资源 1.1 网络 1.2 存储 1.3 小结 2、Pause主要功能 3、Pod 与 Pause 结构的设计初衷 五、Pod容器的分类 1、基础容器(infrastructure container)…...
激活函数入门学习
本篇文章从外行工科的角度尽量详细剖析激活函数,希望不吝指教! 学习过程如下,先知道这个东西是什么,有什么用处,以及怎么使用它: 1. 为什么使用激活函数 2. 激活函数总类及优缺点 3. 如何选择激活函数 …...
小文智能结合ChatGPT的产业未来
最近几个月,由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT在国内外各大平台掀起了一阵AI狂潮。短短几天时间,其用户量就突破了百万大关,注册用户之多一度导致服务器爆满。 继AI画图之后,ChatGPT成为了新的顶流…...
邵阳市住房和建设局网站/企业如何建立网站
Cocoa 提供了NSPredicate 用于指定过滤条件,谓词是指在计算机中表示计算真假值的函数, 它使用起来有点儿像SQL 的查询条件,主要用于从集合中分拣出符合条件的对象,也可以 用于字符串的正则匹配。首先我们看一个非常简单的例子&…...
有一个私人做慈善的网站/软文推广渠道主要有
spring事务的分类:声明式事务、编程式事务 spring事务的原理:通过AOP,环绕通知进行拦截。 使用spring事务的注意事项:不能try.(因为要将异常抛出给外层) 默认开启事务注解。(不用添加EnableTransactionalManagment&…...
怎么给网站添加统计代码/360营销推广
废话不多说,直接上代码: 需要转换的为list的json代码: [{ "id":104,"mid":16,"up_count":103,"count_date":"2016-08-15","name":"荼丸","fans":18006,&…...
做微商卖产品在哪个网站销量能好点/千峰培训出来好就业吗
用rmoutliers()函数即可移除数据组中的离群值,可作数据清洗的初步方法。如果是移除一类数据,可以用方差分析、主成分析、相关性分析、皮尔逊相关系数等方法。 语法 最简单的用法是第一个,其中A是输入的数据,B是输出的数据。 B …...
能用VUE做网站/百度pc端入口
这篇文章是出自荷兰代尔夫特理工大学(Delft University of Technology)机器人研究所(Delft Robotics Institute)团队,16年底发表在机器人学界顶级刊物: Transaction on Robotics (TRO)的工作。一篇侧重机械设计类的文章…...
网页打不开无法访问此网站/国外网站排名前十
递归求解,结束条件,f(2)=1 def dfs(n):if n == 1:return 0if n == 2:return 1if n % 2:# 取出、放回 + 平均分配 共两次...