当前位置: 首页 > news >正文

c++ chrono

chrono

chrono是一个time library, 源于boost,现在是C++标准

使用时,需要导入chrono,其所有实现均在std::chrono namespace下。

#include <chrono>

chrono是一个模版库,使用简单,功能强大,有三个重要概念:duration、time_point、clock

Durations

std::chrono::duration 表示一段时间,比如两个小时,12.88秒等等,只要能换算成秒即可。

template <class Rep, class Period = ratio<1> > class duration;
  • Rep:表示一种数值类型,用来表示Period的数量,比如int,float,double
  • Period:ratio类型,用来表示【用秒表示的时间单位】比如second

常用的duration<Rep,Period>,在std::chrono::duration下:

  • ratio<3600, 1> hours
  • ratio<60, 1> minutes
  • ratio<1, 1> seconds
  • ratio<1, 1000> microseconds
  • ratio<1, 1000000> microseconds
  • ratio<1, 1000000000> nanosecons

ratio类模版的原型:

template <intmax_t N, intmax_t D = 1> class ratio;

N代表分子,D代表分母,所以ratio表示一个分数值,可以自己定义,比如ratio<1, -2>表示单位时间是-0.5秒

由于各种duration表示不同,chrono库提供了duration_cast类型转换函数,模板如下:

template <class ToDuration, class Rep, class Period>
constexpr ToDuration duration_cast (const duration<Rep,Period>& dtn);

表示一段时间,示例

#include <ratio>
#include <chrono>int main ()
{typedef std::chrono::duration<int> seconds_type;typedef std::chrono::duration<int,std::milli> milliseconds_type;typedef std::chrono::duration<int,std::ratio<60*60>> hours_type;hours_type h_oneday (24);                  // 24hseconds_type s_oneday (60*60*24);          // 86400smilliseconds_type ms_oneday (s_oneday);    // 86400000msseconds_type s_onehour (60*60);            // 3600shours_type h_onehour (std::chrono::duration_cast<hours_type>(s_onehour));milliseconds_type ms_onehour (s_onehour);  // 3600000ms (ok, no type truncation)std::cout << ms_onehour.count() << "ms in 1h" << std::endl;return 0;
}
// duration::count  返回Rep类型的Period数量
#include <chrono>       // std::chrono::seconds, std::chrono::millisecondsint main ()
{using namespace std::chrono;// std::chrono::milliseconds is an instatiation of std::chrono::duration:milliseconds foo (1000); // 1 secondfoo*=60;std::cout << "duration (in periods): ";std::cout << foo.count() << " milliseconds.\n";std::cout << "duration (in seconds): ";std::cout << foo.count() * milliseconds::period::num / milliseconds::period::den;std::cout << " seconds.\n";return 0;
}

Time points

std::chrono::time_point 表示一个具体时间,如上个世纪80年代、生日、今天下午、火车出发时间等,只要它能用计算机时钟表示。鉴于使用时间的情景不同,这个time point具体到什么程度,由选用的单位决定。一个time point必须有一个clock计时。参见clock的说明。

template <class Clock, class Duration = typename Clock::duration>  class time_point;
#include <chrono>
#include <ctime>int main ()
{using namespace std::chrono;system_clock::time_point tp_epoch;    // epoch valuetime_point <system_clock,duration<int>> tp_seconds (duration<int>(1));system_clock::time_point tp (tp_seconds);std::cout << "1 second since system_clock epoch = ";// 函数time_from_eproch()用来获得1970年1月1日到time_point时间经过的duration。// 如果timepoint以天为单位,函数返回的duration就以天为单位。std::cout << tp.time_since_epoch().count();std::cout << " system_clock periods." << std::endl;// display time_point:std::time_t tt = system_clock::to_time_t(tp);std::cout << "time_point tp is: " << ctime(&tt);return 0;
}

chrono也提供了相应的转换函数 time_point_cast

template <class ToDuration, class Clock, class Duration>
time_point<Clock,ToDuration> time_point_cast (const time_point<Clock,Duration>& tp);
#include <iostream>
#include <ratio>
#include <chrono>int main ()
{using namespace std::chrono;typedef duration<int,std::ratio<60*60*24>> days_type;time_point<system_clock,days_type> today = time_point_cast<days_type>(system_clock::now());std::cout << today.time_since_epoch().count() << " days since epoch" << std::endl;return 0;
}

Clocks

std::chrono::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_point
// system_clock example
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>int main ()
{using std::chrono::system_clock;std::chrono::duration<int,std::ratio<60*60*24> > one_day (1);system_clock::time_point today = system_clock::now();system_clock::time_point tomorrow = today + one_day;std::time_t tt;tt = system_clock::to_time_t ( today );std::cout << "today is: " << ctime(&tt);tt = system_clock::to_time_t ( tomorrow );std::cout << "tomorrow will be: " << ctime(&tt);return 0;
}

std::chrono::steady_clock 为了表示稳定的时间间隔,后一次调用now()得到的时间总是比前一次的值大(这句话的意思其实是,如果中途修改了系统时间,也不影响now()的结果),每次tick都保证过了稳定的时间间隔。

#include <chrono>int main ()
{using namespace std::chrono;steady_clock::time_point t1 = steady_clock::now();std::cout << "printing out 1000 stars...\n";for (int i=0; i<1000; ++i) std::cout << "*";std::cout << std::endl;steady_clock::time_point t2 = steady_clock::now();duration<double> time_span = duration_cast<duration<double>>(t2 - t1);std::cout << "It took me " << time_span.count() << " seconds.";std::cout << std::endl;return 0;
}

std::chrono::high_resolution_clock 顾名思义,是系统可用的最高精度的时钟。实际上high_resolution_clock只不过是system_clock或者steady_clock的typedef。

相关文章:

c++ chrono

chrono chrono是一个time library, 源于boost&#xff0c;现在是C标准 使用时&#xff0c;需要导入chrono&#xff0c;其所有实现均在std::chrono namespace下。 #include <chrono>chrono是一个模版库&#xff0c;使用简单&#xff0c;功能强大&#xff0c;有三个重要…...

实现长短地址的相互映射

长地址请求&#xff0c;返回短地址&#xff0c;如何实现长短地址的相互映射 转换为&#xff1a; 解决方式&#xff1a; 使用发号策略&#xff0c;给每一个长地址发一个号&#xff0c;不停自增&#xff0c;第一个使用这个服务的人得到的短地址是xx.xx/0 第二个是 xx.xx/1 &…...

第1讲:前后端分离思想

什么是前端 前端其实是个很大的范畴。 简单点说&#xff0c;针对浏览器的开发&#xff0c;浏览器呈现出来的页面就是前端。它的实质是前端代码在浏览器端被编译、运行、渲染。前端代码主要由三个部分构成&#xff1a;HTML&#xff08;超文本标记语言&#xff09;、CSS&#xf…...

【深度学习】【Opencv】Python/C++调用onnx模型【基础】

【深度学习】【Opencv】python/C调用onnx模型【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【Opencv】python/C调用onnx模型【基础】前言Python版本OpenCVWindows平台安装OpenCVopencv调用onnx模型 C版本OpenCVWindows平…...

C# MQTT通讯

文章目录 前言MQTTnetMQTT初始变量生成option连接Mqtt服务器发送数据添加订阅 前言 MQTTnet是Mqtt的net版本。国内MQTTnet教程比较老旧&#xff0c;都是2.x版本。MQTTnet在4.x版本版本代码逻辑有比较大的改动。所以最后还是面向Github编程。 EMQ X介绍及安装 长链接(MQTT)测…...

使用c++实现输出爱心(软件:visual Studio)

#include <iostream> using namespace std;int main() {//爱心曲线方程(x^2y^2-a)^3-x^2*y30double a 0.5;//定义绘图边界double bound 1.3 * sqrt(a);//x,y坐标变化步长double step 0.05;//二维扫描所有点,外层逐层扫描for (double y bound; y > -bound; y - ste…...

uploadifive上传工具php版使用

uploadifive自带的DEMO文件。 下载地址&#xff1a; http://www.uploadify.com/download/ <!DOCTYPE HTML> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>UploadiFive Test&…...

Docker容器管理

docker容器相当于一个进程&#xff0c;性能接近于原生&#xff0c;几乎没有损耗&#xff1b; docker容器在单台主机上支持的数量成百上千&#xff1b; 容器与容器之间相互隔离&#xff1b; 镜像是创建容器的基础&#xff0c;可以理解镜像为一个压缩包 Docker容器的管理 容…...

【文末送书】用Chat GPT轻松玩转机器学习与深度学习

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…...

Redis的学习

Redis Redis特征 键值型&#xff0c;value支持多种不同数据结构&#xff0c;功能丰富单线程&#xff0c;每个命令具有原子性低延迟&#xff0c;速度快&#xff08;基于内存&#xff0c;IO多路复用&#xff0c;良好的编码&#xff09;支持数据持久化支持主从集群&#xff0c;分…...

java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…...

Vue 3的 h 函数详解

Vue 3的 h 函数详解 文章目录 Vue 3的 h 函数详解1、什么是h函数2、基本用法3、动态组件4、事件监听器5、条件渲染 Vue 3的 h函数&#xff08; createVNode&#xff09;是前端开发中一个强大的工具&#xff0c;用于创建虚拟DOM节点。虚拟DOM是Vue框架中的核心概念&#xff0c…...

防近视台灯什么牌子好?推荐有效预防近视的台灯

作为一名家长&#xff0c;平常最关心的应该就是孩子能够健康成长了。但是通过调查数据我们可以发现我国青少年近视率位居世界第一&#xff0c;儿童青少年总体近视率为52.7%&#xff1b;其中6岁儿童为14.5%&#xff0c;小学生为36.0%&#xff0c;初中生为71.6%&#xff0c;高中生…...

五、C#—字符串

&#x1f33b;&#x1f33b; 目录 一、字符串1.1 字符类型1.2 转义字符1.3 字符串的声明及赋值1.3.1 c# 中的字符串1.3.2 声明字符串1.3.3 使用字符串1.3.4 字符串的初始化1.3.4.1 引用字符串常量之初始化1.3.4.2 利用字符数组初始化1.3.4.3 提取数组中的一部分进行初始化 1.3.…...

【Vue3 源码解析】nextTick

nextTick 是 Vue 3 中用于异步执行回调函数的函数&#xff0c;它会将回调函数延迟到下一个微任务队列中执行。其中&#xff0c;Vue 更新 DOM 是异步的。下面是对 nextTick 函数的详细解释&#xff1a; export function nextTick<T void, R void>(this: T,fn?: (this:…...

基于ModebusRTU通信采集温度湿度项目案例

目录 一、模拟温湿度模拟 【1.1】温湿度仪表参数 【1.1】使用电脑模拟传感器 【1.2】使用Codesys软件模拟传感器 二、自定义控件UI设计 【2.1】自定义控件温度湿度柱状设计 ​编辑 【2.1.1】设置温度湿度柱状实际显示【属性】 【2.1.2】设置温度湿度柱状的背景颜色【属…...

【已解决】关于如何将Doccano标注的文本转换成NER模型可以直接处理的CoNLL 2003格式

笔者要做命名实体识别&#xff08;NER&#xff09;的工作&#xff0c;选择了Doccano平台来进行文本标注。 Doccano平台对标注结果的导出格式是JSONL格式&#xff0c;我们导出了NER.jsonl文件。 但是用python语言搭建深度学习模型来实现NER时&#xff0c;一般接收的输入数据格式…...

网络编程day03(UDP中的connect函数、tftp)

今日任务&#xff1a;tftp的文件上传下载&#xff08;服务端已经准备好&#xff09; 服务端&#xff08;已上传&#xff09; 客户端&#xff1a; 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h…...

flarum 论坛 User Statistics插件修改

此插件在中国使用日期不是很理想&#xff0c;于是决定修改代码 下面是插件信息&#xff1a; User Statistics A Flarum extension. Add some user statistics in flarum posts, this extension require clarkwinkelmann/flarum-ext-likes-received and will be installed au…...

阿里云产品试用系列-容器镜像服务 ACR

阿里云容器镜像服务&#xff08;简称 ACR&#xff09;是面向容器镜像、Helm Chart 等符合 OCI 标准的云原生制品安全托管及高效分发平台。 ACR 支持全球同步加速、大规模/大镜像分发加速、多代码源构建加速等全链路提效&#xff0c;与容器服务 ACK 无缝集成&#xff0c;帮助企业…...

Langchain里的“记忆力”,让AI只记住有用的事

今天要讲以下内容&#xff1a; 1.ConversationBufferWindowMemory&#xff1a;基于一个固定长度的滑动窗口的“记忆”功能 2.ConversationSummaryMemory&#xff1a;总结对话“记忆”功能 3.ConversationSummaryBufferMemory&#xff1a;上面两个的结合&#xff0c;超过一定…...

从零开始的LINUX(一)

LINUX本质是一种操作系统&#xff0c;用于对软硬件资源进行管理&#xff0c;其管理的方式是指令。指令是先于图形化界面产生的&#xff0c;相比起图形化界面&#xff0c;指令显然更加难以理解&#xff0c;但两者只是形式上的不同&#xff0c;本质并没有区别。 简单的指令&…...

CH34X-MPHSI高速Master扩展应用—I2C设备调试

一、前言 本文介绍&#xff0c;基于USB2.0高速USB转接芯片CH347&#xff0c;配合厂商提供的USB转MPHSI&#xff08;Multi Protocol High-Speed Serial Interface&#xff09;Master总线驱动&#xff08;CH34X-MPHSI-Master&#xff09;为系统扩展I2C总线的用法&#xff0c;除…...

记一次正式环境升级docker服务基础进行版本异常

因为服务的httpd和tomcat基础镜像版本比较旧&#xff0c;漏洞多&#xff0c;需要升级至最新版本。在本地环境和测试环境都是直接将dockerfile中的FROM基础镜像升级至最新&#xff1a; httpd&#xff1a;由httpd:2.4.52-alpine升级至httpd:2.4.57 tomcat&#xff1a;由4年前的…...

leetcode面试经典150题第一弹(一)

leetcode面试经典150题第一弹 一、合并俩个有序数组(难度&#xff1a;简单) 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并…...

VME-7807RC-414001 350-93007807-414001 VMIVME-017807-411001 VMIVME-017807-414001

VME-7807RC-414001 350-93007807-414001 VMIVME-017807-411001 VMIVME-017807-414001 由于第12代英特尔酷睿处理器的16核/24线程配置&#xff0c;Nuvo-9000型号与之前的平台相比&#xff0c;性能大幅提升。它们还支持新的DDR5内存标准&#xff0c;以获得更多内存带宽&#xf…...

01-Zookeeper特性与节点数据类型详解

上一篇&#xff1a; 在了解Zookeeper之前&#xff0c;需要对分布式相关知识有一定了解&#xff0c;什么是分布式系统呢&#xff1f;通常情况下&#xff0c;单个物理节点很容易达到性能&#xff0c;计算或者容量的瓶颈&#xff0c;所以这个时候就需要多个物理节点来共同完成某项…...

TP6 TP8 使用阿里官方OSS SDK方法

安装 composer require aliyuncs/oss-sdk-php 官网&#xff1a;GitHub - aliyun/aliyun-oss-php-sdk: Aliyun OSS SDK for PHP 二、PHP简单上传 官网教程&#xff1a;如何进行字符串上传和文件上传_对象存储 OSS-阿里云帮助中心 引入 use OSS\OssClient; use OSS\Core\OssE…...

SkyWalking分布式链路追踪学习

为什么要用分布式链路追踪 实际生产中&#xff0c;面对几十个、甚至成百上千个的微服务实例&#xff0c;如果一旦某个实例发生宕机&#xff0c;如果不能快速定位、提交预警&#xff0c;对实际生产造成的损失无疑是巨大的。所以&#xff0c;要对微服务进行监控、预警&#xff0…...

git revert 撤销之前的提交

git revert 用来撤销之前的提交&#xff0c;它会生成一个新的 commit id 。 输入 git revert --help 可以看到帮忙信息。 git revert commitID 不编辑新的 commit 说明 git log 找到需要撤销的 commitID &#xff0c; 然后执行 git revert commitID &#xff0c;会提示如下…...