当前位置: 首页 > 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;帮助企业…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...