C++11的时间新特性之high_resolution_clock

2023-11-16

转自:https://blog.csdn.net/cw_hello1/article/details/66476290

我在这里只是说一说high_resolution_clock的时间用法:

这里有一个C++的网上的API地址,包含了C++11的新特性。http://www.cplusplus.com/reference/

只要了解两个主要内容就可以打印出我们想要的时间单位。(秒,毫秒,微妙,纳秒,等等)。

我们可以在上面的那个网站,找到Other选项,在找到chrono选项,或者单击这个链接http://www.cplusplus.com/reference/chrono/(找到我们讲解的两个主要内容:duration和time_point)

 

一、duration(一段时间):

1.现实生活中,我们表示一段时间:20分钟,10秒,2天,1毫秒等等。我们可以看出一共包含两个主要内容:①一个数值(例如:20),②时间单位(例如:分钟)。我们使用:①20,②分钟,就可以表示:20分钟的时间段

2.在Duration中,我们可以看到duration是一个模板类(不用管)。就是你必须给他传递相应的类型。也就是:

个数值:是什么类型,即(20,你想使用int,double,float那种类型表示),注意:这个是必须要设置的,(就是文中的Rep),使用count成员变量存储这个数值。

时间单位:是固定的类型:std:ratio<第一个数值,第二个数值>。即我们如何表示:分钟,秒,毫秒单位。他就是一个比例值:第一个数值除以第二个数值。单位是秒,(这个是可选的:默认值是秒)。例如:

我们表示一分钟(60秒):std:ratio<60,1>:就是一分钟。60/1(秒)

我们表示一小时(60*60秒):std:ratio<3600,1>,就是小时的单位,3600/1(秒)

我们表示一微妙(0.000001秒):std:ratio<1,1000000>,就是微妙的单位,1/1000000(秒)

3.讲解了duration的两个成员类型。下面就是讲解如何构造这个duration类:主要有两种方法:

①duration(数值),就是给第一个参数赋值,因为第二参数单位,在定义变量的时候就指定好了。例如:

std::chrono::duration<double,std::ratio<1,1>> seconds(1):就是一秒钟。后面std::ratio<1,1>可以不写,默认的就是秒为单位。

 

std::chrono::duration<double,std::ratio<60,1>> minutes(5):就表示五分钟。这时后面的那个单位,就必须有,因为单位是分钟。

②duration(duration变量),就是将一个duration赋值给另一个duration。他们的时间单位可以不相同,也可以相同(那么他们就是一模一样的)。但是:有一个原则:就是时间单位范围大的可以赋值给时间单位范围小的。即:分钟可以赋值给秒,毫秒,纳秒,但是不能赋值给小时,天等单位。例如:

std::chrono::duration<double,std::ratio<1,1000>> millis(minutes),也是表示五分钟,使用上面定义的变量。这是可以的,因为这是大时间范围向小时间范围赋值

 

std::chrono::duration<double,std::ratio<24*60*60,1>> days(minutes),这是错误的表达。编译的时候不能通过,如果我们想要转过去,就必须使用强制类型转换(duration_cast类)。

std::chrono::duration<double,std::ratio<24*60*60,1>> days=std::chrono::duration_cast<std::chrono::duration<double,std::ratio<24*60*60,1>>>(minutes),其中duration_cast<>中就是你想要转换到哪一种duration,括号中就是要转换的变量。

4.这个方法常常使用:就是count()方法,就是获得duration中的第一参数,因为我们自己编写程序时,一定是直到单位的,只要知道想要的数值就可以了。

 

到这里duration类就差不多了,应对基本的应用没有问题。想了解更多,就到上面那个网站去看看。那个网站或是网上编程运行结果的。主要找到任何一个程序,后面有一个Exit&Run按钮。

 

注意:相同的时间单位是可以使用操作符的。(+,-,+=,-=,*,/,*=,/=,等等)。

 

二、时间点:

1.某一个具体的时间点,例如:当前时间(常常使用),1990.4,7的8点整。

2.现实生活中,我们如何表示某一个具体的时间点。例如:2017/3/26号,

他有一个相对时间点:他就是相对于公元0年开始计算的。

一段时间(duration):过了2017年零3个月零26天。

当然我们现实没有这么麻烦,因为我们默认认为就是从公元0年的开始计算的。

3.一个时间点:就有两部分组成:①一个相对时间点,②一段时间(duration)组成

4.我们一般也不构造时间点,当然也有时间点的构造函数。(自己在网上看看)。我们一般都是获得当前时间点

5.再讲可能又晕了。了解这么多就够了。

下面就看看如何获得当前时间吧!!

 

三、获得时间点

1.我们获得时间点主要是通过clock时钟获得的。一共有三个时钟:

①、high_resolution_clock

②、system_clock

③、steady_clock

2.我主要说说high_resolution_clock时钟。主要使用它的一个now()方法。(我们可以使用auto可以接受任何类型)

std::chrono::high_resolution_clock::time_point t1=std::chrono::high_resolution_clock::now();或者

auto t1=std::chrono::high_resolution_clock::now();

3.注意:时间点也可以使用操作符的。(-(常常使用计算一段时间的间隔),+)。

4.注意:std::chrono::high_resolution_clock返回的时间点是按为单位的。

 

四、实践。(我们分别按秒,微妙,毫秒)返回需要的时间。

1.例如打印一百个*号需要的时间:

 

 
  1. // high_resolution_clock example

  2. #include <iostream>

  3. #include <ctime>

  4. #include <ratio>

  5. #include <chrono>

  6.  
  7. int main ()

  8. {

  9. using namespace std::chrono;

  10.  
  11. high_resolution_clock::time_point t1 = high_resolution_clock::now();

  12.  
  13. std::cout << "printing out 1000 stars...\n";

  14. for (int i=0; i<1000; ++i) std::cout << "*";

  15. std::cout << std::endl;

  16.  
  17. high_resolution_clock::time_point t2 = high_resolution_clock::now();

  18.  
  19.  
  20. std::cout<<"in seconds time:";

  21. duration<double,std::ratio<1,1>> duration_s(t2-t1);

  22. std::cout<<duration_s.count()<<" seconds"<<std::endl;

  23.  
  24. std::cout<<"in millisecond time:";

  25. //duration<double,std::ratio<1,1000>> duration_ms(t2-t1);

  26. duration<double,std::ratio<1,1000>> duration_ms=duration_cast<duration<double,std::ratio<1,1000>>>(t2-t1);

  27. std::cout<<duration_ms.count()<<" milliseconds"<<std::endl;

  28.  
  29. std::cout<<"in microsecond time:";

  30. //duration<double,std::ratio<1,1000000>> duration_ms(t2-t1);

  31. duration<double,std::ratio<1,1000000>> duration_mcs=duration_cast<duration<double,std::ratio<1,1000000>>>(t2-t1);

  32. std::cout<<duration_mcs.count()<<" microseconds"<<std::endl;

  33.  
  34.  
  35. duration<double> time_span = duration_cast<duration<double>>(t2 - t1);

  36.  
  37. std::cout << "It took me " << time_span.count() << " seconds.";

  38. std::cout << std::endl;

  39.  
  40. return 0;

  41. }

运行结果:(那一百个*就不显示了)

in seconds time:0.000102887

secondsin millisecond time:0.102887

millisecondsin microsecond

time:102.887 microseconds

 

我们如何在Linux上如何编译呢?

g++ -std=c++11 文件名 -o a.exe

注意: -std=c++11,一定要有,没有就会报错。我也是好长时间才编译成功,就是没有加-std=c++11。

当然你没有Linux的话,就在那个网上找到任何一个程序,点击Exit&Run,就会出现一个窗口,让你可以在你里面编辑,并点击Run运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11的时间新特性之high_resolution_clock 的相关文章

  • so库的反编译,反汇编

    Linux APP SO的反汇编工具 ida Pro 可以反汇编app和SO库 有函数名 但是不能反编译到code这一级别 下载最强的反编译工具 ida Pro 6 4 Plus rar 还有这个反汇编工具 没用过 转自 http bbs
  • PHP学习笔记——加密解密

    一 MD5算法 MD5消息摘要算法 Message Digest Algorithm 是R Rivest设计的 它对输入的任意长度的消息进行运算 产生一个128位的消息摘要 随着穷举攻击和密码分析的发展 MD5算法已经不再那么流行了 1 算
  • Python 中 import 的机制与实现

    转自 http python jobbole com 82604 本文所涉及到的代码在github上 概述 Python 是一门优美简单 功能强大的动态语言 在刚刚接触这门语言时 我们会被其优美的格式 简洁的语法和无穷无尽的类库所震撼 在真
  • Unity3D protobuf-net使用方式

    1 下载protobuf net 2 创建Unity工程 创建一个Plugins文件夹 将protobuf net解压把里面得protobuf net放到Plugins 3 创建一个名为mcs的文本文件 里面写上 unsafe 4 重启Un
  • 需要注意字节序的大端(big endian)和小端(little endian)的几种情景

    大端 big endian 在内存中 按照从最低有效字节到最高有效字节的顺序存储对象 即数据的高字节 保存在内存的低地址中 而数据的低字节 保存在内存的高地址中 小端 little endian 在内存中 按照从最高有效字节到最低有效字节的
  • linux shell 编程

    转自 http blog csdn net fpmystar article details 4183678 和 http blog csdn net buutterfly article details 6615162 在进行linux测
  • C++智能指针简单剖析

    转自 https www cnblogs com lanxuezaipiao p 4132096 html 导读 最近在补看 C Primer Plus 第六版 这的确是本好书 其中关于智能指针的章节解析的非常清晰 一解我以前的多处困惑 C
  • C++ STL之vector用法总结

    转自 https www cnblogs com zhonghuasong p 5975979 html 介绍 vector是表示可变大小数组的序列容器 就像数组一样 vector也采用的连续存储空间来存储元素 也就是意味着可以采用下标对v
  • 机器学习——深度学习(Deep Learning)

    Deep Learning是机器学习中一个非常接近AI的领域 其动机在于建立 模拟人脑进行分析学习的神经网络 最近研究了机器学习中一些深度学习的相关知识 本文给出一些很有用的资料和心得 Key Words 有监督学习与无监督学习 分类 回归
  • 广度/宽度优先搜索(BFS)

    转自 https blog csdn net raphealguo article details 7523411 1 前言 广度优先搜索 也称宽度优先搜索 缩写BFS 以下采用广度来描述 是连通图的一种遍历策略 因为它的思想是从一个顶点V
  • R与SPSS、SAS相比较_Python 在数据分析工作中的地位与R语言、SAS、SPSS 比较如何?

    转自 http m elecfans com article 611407 html 统计分析的软件和程序分析 能够用来做统计分析的软件和程序很多 目前应用比较广泛的包括 SPSS SAS R语言 Matlab S PLUS S Miner
  • C/C++编程笔记:C++中的指针与引用,又在什么时候使用?

    C和C 支持与大多数其他编程语言不同的指针 其他语言包括C Java Python Ruby Perl和PHP 从表面上看 引用和指针非常相似 都用于使一个变量提供对另一变量的访问 两者都提供了许多相同的功能 因此通常不清楚这些不同机制之间
  • QT学习——QFileSystemModel与QTreeView显示文件夹下的文件信息

    最近因为项目需求 使用QT做界面 新手学习 记录一些笔记 虽然QT已经做好了标准对话框的国际化 但是有时候对于中文的翻译可能达不到我们期望的 所以就需要我们自己来修改 比如下面的代码中 利用了国际化 写在main函数中 QApplicati
  • unique_ptr的使用和陷阱

    转自 https blog csdn net qq 33266987 article details 78784286 unique ptr的使用 分配内存 与shared ptr不同 unique ptr没有定义类似make shared
  • make时遇到File `Makefile' has modification time 4e+04 s in the future的解决办法

    1 原因 是虚拟机时间和电脑时间不匹配造成 2 解决办法 在VMware 菜单虚拟机 M gt 设置 S gt 选项下设置开启时间同步 然后重启虚拟机 3 若还出现 warning Clock skew detected Your buil
  • 24时区来源,CST,CET,UTC,DST,Unix时间戳概述、关系、转换

    全球24个时区的划分 相较于两地时间表 显示世界各时区时间和地名的世界时区表 Universal WorldTime 就显得精密与复杂多 通常世界时区表的表盘上会标示着全球24个时区的城市名称 全球24个时区是如何产生的 过去世界各地原本各
  • QT学习——QTreeView获取选中单行数据和多行数据

    个人感觉QTreeView有些地方的使用没有MFC的CListCtrl方便 比如在不响应单击信号的情况下 获取选中行的数据 单行和多行 也许因为我是新手吧 一 获取单行选中的数据 QModelIndex selected ui treeVi
  • C++11的时间新特性之high_resolution_clock

    转自 https blog csdn net cw hello1 article details 66476290 我在这里只是说一说high resolution clock的时间用法 这里有一个C 的网上的API地址 包含了C 11的新
  • Thread Local Storage---__thread 关键字的使用方法

    转自 http blog csdn net yusiguyuan article details 22938671 thread是GCC内置的线程局部存储设施 存取效率可以和全局变量相比 thread变量每一个线程有一份独立实体 各个线程的
  • 开源软件许可证—GPL、AGPL、LGPL、Apache、ZLIB/LIBPNG、MIT

    转自 http www dushibaiyu com 2013 08 E5 BC 80 E6 BA 90 E8 BD AF E4 BB B6 E8 AE B8 E5 8F AF E8 AF 81 gpl E3 80 81agpl E3 80

随机推荐

  • LeetCode算法心得——和可被 K 整除的子数组(前缀和+HashMap)

    大家好 我是晴天学长 同余定理的应用 需要的小伙伴可以关注支持一下哦 后续会继续更新的 1 和可被 K 整除的子数组 题目描述 给定一个整数数组 A 返回其中元素之和可被 K 整除的 连续 非空 子数组的数目 示例 输入 A 4 5 0 2
  • 【极简数据结构】快速了解并实现顺序表,速通玩家的最爱

    顺序表目录 前言 一 线性表 二 顺序表 1 顺序表的概念 2 接口函数 顺序表 初始化 顺序表 尾插 顺序表 打印 顺序表 销毁 顺序表 尾删 顺序表 头插 和 顺序表 扩容 优化顺序表 尾删 顺序表 头删 顺序表 查找 顺序表 任意po
  • Android如何安全的关闭线程

    正常情况下 当线程中的run方法执行完毕后 线程是会自动关闭 不需要我们手动去关闭的 如 new Thread new Runnable Override public void run 执行操作 start 该线程在run方法中的操作执行
  • C语言经典100例题(22)--两个乒乓球队进行比赛,各出三人。甲队为a, b, c三人,乙队为x, y, z三人。已抽签决定//比赛名单,有人向队员打听比赛的名单.a说他不和x比,c说他不和x, z

    目录 题目 问题分析 代码 运行结果 题目 两个乒乓球队进行比赛 各出三人 甲队为a b c三人 乙队为x y z三人 已抽签决定比赛名单 有人向队员打听比赛的名单 a说他不和x比 c说他不和x z比 请编程序找出三队赛手的名单 问题分析
  • linux屏蔽海外流量的两种方法

    方法一 使用大神的开源脚本 屏蔽指定国家地区的IP访问 wget https raw githubusercontent com iiiiiii1 Block IPs from countries master block ips sh s
  • RSA的C++语言描述简单实现

    文章目录 前言 代码仓库 代码特点 大 素 数讨论 部分资料 作者理解 代码 rsa h rsa cpp main cpp 结果 总结 参考资料 作者的话 前言 网络安全中RSA的C 语言描述简单实现 代码仓库 yezhening Prog
  • excel 生成sql

    参考文章 https blog csdn net m0 67695717 article details 127406830 新增语句 INSERT INTO table name column1 column2 VALUES A2 D2
  • 判断一个文件是否为CSV文件的Python代码

    在Python中 我们可以使用os模块的path splitext 函数来获取文件扩展名 然后判断这个扩展名是否为 csv 以下是一个示例代码 import os def is csv file file path file extensi
  • WSL2和Docker for Windows

    文章目录 一 Docker和WSL2概述 二 WSL安装使用 三 基于Docker导入任意WSL分发 参考资料 一 Docker和WSL2概述 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中
  • git中出现“interactive rebase in progress; onto 11dde1e”错误分析与解决方案

    出错原因分析 进行提交前 需提前拉取远程仓库的代码 拉取之后 需要重新add commit 避免仓库的数据被修改 但是再次提交之后会出现上图的错误 原因 是因为你现在正在编辑的提交将要覆盖在 11ddele commited 之前使用过gi
  • 472-I/O阻塞和非阻塞,同步和异步

    阻塞 非阻塞 同步 异步 典型的一次I O的两个阶段是什么 数据准备 和 数据读写 我们作为服务器 接收客户端的请求 得先监听客户端有没有数据过来 这是一个状态 还有就是数据过来了该怎么去读写 这又是一个状态 实际上 阻塞 非阻塞 同步 异
  • 基于51单片机的羽毛球计分器proteus仿真程序设计

    硬件设计 末尾附文件 方案 在像羽毛球这样的竞技比赛中 计分器占着很大的作用 如果我们就只在心里记着双方的比分 显然是不实际的 而且在现在的乒乓球比赛中采用的都是21分制 因此我们不能再用传统的计分方式了 本次课题采用单片机设计了一个羽毛球
  • JetBrains IDE Support 调试工具(页面自动刷新)

    1 谷歌浏览器安装JetBrains IDE Support 插件 2 更改端口 webstorm 和 JetBrains IDE Support 端口不对插件图标会黑 3 debug 4 同步
  • 求定制闲鱼爬虫获取最新发布商品

    闲鱼采集及监控下单软件开发 1 点击宝贝右键打开网页 2 点击宝贝右键拉黑卖家 3 点击宝贝右键清空列表 4 点击宝贝左键显示二维码和主图 5 软件页面显示宝贝二维码 6 软件页面显示宝贝主图 7 软件页面显示检测搜索词及下单宝贝 8 每次
  • 介绍计算机方队,方阵

    f ng zh n 方阵 语音 编辑 锁定 讨论 上传视频 方阵是古代军队作战时采用的一种队形 是把军队在野外开阔地上排列成方形阵式 远古方阵由前军 中军和后军相互嵌套排列而成 方阵平面呈现 回 字形状 反映出远古观念中的一种政治地理结构
  • Java丨JVM虚拟机与类加载器

    一丶JVM 虚拟机介绍 Sun HotSpot VM 这个目前看起来 血统纯正 的虚拟机在最初并非由Sun公司开发 而是由一家名为 Longview Technologies 的小公 司设计的 甚至这个虚拟机最初并非是为Java语言而开发的
  • FPGA图像处理基础----直方图统计

    直方图统计的原理 直方图统计从数学上来说 是对图像中的像素点进行统计 图像直方图统计常用于统计灰度图像 表示图像中各个灰度级出现的次数或者概率 统计直方图的实现采用C C 或者其他高级语言实现十分简单 单采用FPGA来实现直方图的统计就稍显
  • Tensorflow分布式训练

    Tensorflow分布式训练 一 分布式训练模式 1 模型并行 In graph 2 数据并行 Between graph 二 异步 同步训练 1 异步训练 2 同步训练 三 同步更新和异步更新的优缺点 四 分布式机器类型 TODO 1
  • 干货|Pytorch弹性训练极简实现( 附源码)

    点击上方 视学算法 选择加 星标 或 置顶 重磅干货 第一时间送达 作者丨颜挺帅 知乎 已授权 来源丨https zhuanlan zhihu com p 489892744 编辑丨极市平台 导读 作者将以往抽象的分布式训练的概念以代码的形
  • C++11的时间新特性之high_resolution_clock

    转自 https blog csdn net cw hello1 article details 66476290 我在这里只是说一说high resolution clock的时间用法 这里有一个C 的网上的API地址 包含了C 11的新