C++,std::chrono 详解

news2024/9/23 11:15:04

在这里插入图片描述

文章目录

  • 1. 概述
  • 2. 时间点(Time Points)
  • 3. 时间间隔(Durations)
  • 4. 时钟(Clocks)
  • 5. 时间算术
  • 6. 时间转换
  • 7. 延时
  • 参考


1. 概述

std::chrono 是 C++11 引入的一个库,用于处理日期和时间。它提供了一套丰富的类和函数,允许开发者以高精度(通常是纳秒级)来测量时间间隔、表示时间点、以及进行时间的算术运算。下面是对 std::chrono 库中一些关键组件的详细解释。


2. 时间点(Time Points)

时间点是表示特定时间(如现在、某个过去或未来的时间点)的类。std::chrono 库中,std::chrono::time_point 是一个模板类,通常与特定的时钟(clock)一起使用,如 std::chrono::system_clock、std::chrono::steady_clock 或 std::chrono::high_resolution_clock。

#include <chrono>  
#include <iostream>  
  
int main() {  
    auto now = std::chrono::system_clock::now(); // 获取当前时间点  
    std::cout << "当前时间: " << now.time_since_epoch().count() << " ticks\n";  
    // 注意:time_since_epoch() 返回的是自纪元(通常是1970年1月1日)以来的时间间隔  
}

3. 时间间隔(Durations)

时间间隔表示两个时间点之间的时间长度。std::chrono 库中,std::chrono::duration 是一个模板类,用于表示时间长度。它通常与数值类型和单位(如秒、毫秒、纳秒等)一起使用。

#include <chrono>  
#include <iostream>  
  
int main() {  
    auto duration = std::chrono::seconds(5); // 5秒的时间间隔  
    std::cout << "时间间隔: " << duration.count() << " 秒\n";  
}

4. 时钟(Clocks)

时钟是 std::chrono 库中用于测量时间的工具。C++ 标准库提供了三种时钟:

  • std::chrono::system_clock:表示系统范围的时间点,可用于获取当前时间,并可以转换为 std::time_t 类型,以便与 C 风格的日期和时间函数互操作。
  • std::chrono::steady_clock:提供单调递增的时间点,适合测量时间间隔。它不受系统时间调整的影响。
  • std::chrono::high_resolution_clock:提供最高可用分辨率的时间点,通常等同于 steady_clock 或 system_clock 中分辨率较高的一个。

5. 时间算术

std::chrono 库支持时间点和时间间隔的算术运算,如加法、减法、比较等。

#include <chrono>  
#include <iostream>  
  
int main() {  
    auto now = std::chrono::system_clock::now();  
    auto future = now + std::chrono::hours(24); // 24小时后的时间点  
    std::cout << "24小时后: " << std::chrono::system_clock::to_time_t(future) << std::endl;  
  
    auto duration = future - now; // 计算时间间隔  
    std::cout << "时间间隔: " << duration.count() << " 秒\n";  
}

6. 时间转换

std::chrono 库还提供了将时间点和时间间隔转换为不同单位或格式的功能。例如,std::chrono::duration_cast 可以用于在不同时间单位之间转换时间间隔。

#include <chrono>  
#include <iostream>  
  
int main() {  
    auto duration = std::chrono::seconds(5);  
    auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(duration);  
    std::cout << "5秒 = " << milliseconds.count() << " 毫秒\n";  
}

7. 延时

std::chrono 本身并不直接提供延时(即让程序暂停执行一段时间)的功能。std::chrono 主要用于时间的测量、表示和算术运算,而不是控制程序的执行流程。

然而,你可以结合 std::chrono 和 C++11 引入的其他特性(如 库中的 std::this_thread::sleep_for 或 std::this_thread::sleep_until)来实现延时功能。

以下是使用 std::this_thread::sleep_for 和 std::chrono 实现延时的示例:

#include <iostream>  
#include <chrono>  
#include <thread>  
  
int main() {  
    std::cout << "延时开始..." << std::endl;  
  
    // 延时2秒  
    std::this_thread::sleep_for(std::chrono::seconds(2));  
  
    std::cout << "延时结束!" << std::endl;  
  
    return 0;  
}

在这个示例中,std::chrono::seconds(2) 创建了一个表示2秒时间间隔的 std::chrono::duration 对象,然后 std::this_thread::sleep_for 函数使用这个对象来让当前线程暂停执行2秒。

类似地,如果你想要在某个特定时间点之后唤醒线程,你可以使用 std::this_thread::sleep_until 函数,并传递一个 std::chrono::time_point 对象作为参数。但是,由于 std::chrono::time_point 是与时钟相关联的,你需要确保你传递的时间点与你选择的时钟(如 std::chrono::system_clock)相匹配。然而,在实际应用中,由于系统时钟可能会受到系统时间调整的影响,通常更推荐使用 std::chrono::steady_clock 来测量时间间隔,并使用 std::this_thread::sleep_for 来实现延时,因为这样做更加可靠和精确。

总之,std::chrono 库为 C++ 提供了强大而灵活的时间处理功能,使得开发者能够以高精度和灵活性来测量时间间隔、表示时间点,并进行时间的算术运算和转换。


参考

【1】C++ std::chrono库使用指南 (实现C++ 获取日期,时间戳,计时等功能)
【2】C++ 标准库
【3】C++11 std::chrono库详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2071470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unsloth 教程 - 如何微调 Llama-3并导出到 Ollama

本文翻译整理自&#xff1a;&#x1f999; How to Finetune Llama-3 and Export to Ollama https://docs.unsloth.ai/tutorials/how-to-finetune-llama-3-and-export-to-ollama 文章目录 1、什么是Unsloth&#xff1f;2、什么是Ollama&#xff1f;3、安装Unsloth4、选择要微调的…

博弈论总结

公平组合游戏&#xff08;Impartial Game&#xff09;的定义如下&#xff1a; 游戏有两个人参与&#xff0c;二者轮流做出决策&#xff0c;双方均知道游戏的完整信息&#xff1b; 任意一个游戏者在某一确定状态可以作出的决策集合只与当前的状态有关&#xff0c;而与游戏者无关…

pytorch深度学习基础 6(简单的参数估计学习3)

上一篇博客说了如何拟合一条直线ywxb&#xff0c;今天我们现在使用PyTorch进行相同的曲线拟合 拟合y x*x -2x 3 0.1(-1到1的随机值) 曲线 给定x范围&#xff08;0&#xff0c;3&#xff09; 生成数据 import numpy as np import matplotlib.pyplot as plt import torch as t…

小程序学习day13-API Promise化、全局数据共享(状态管理)、分包

44、API Promise化 &#xff08;1&#xff09;基于回调函数的一部API的缺点&#xff1a;小程序官方提供的异步API都是基于回调函数实现的&#xff0c;容易造成回调地狱的问题&#xff0c;代码可读性、可维护性差 &#xff08;2&#xff09;API Promise化概念&#xff1a; 指…

Qt 环境搭建

sudo apt-get upadte sudo apt-get install qt4-dev-tools sudo apt-get install qtcreator sudo apt-get install qt4-doc sudo apt-get install qt4-qtconfig sudo apt-get install qt-demos编译指令 qmake -projectqmakemake实现Ubuntu20,04 与Windows之间的复制粘贴 安装o…

在C#中如何监控其它应用全屏

原文链接&#xff1a;https://www.cnblogs.com/zhaotianff/p/18338275 在C#中判断其它应用全屏可以有多种方案。我这里提供两种思路 使用定时器 在定时器中定时判断当前窗口的状态是否是最大化或者宽高是否等于桌面窗口的宽高。 这种方法我没有去尝试&#xff0c;凭个人经验…

复杂的编辑表格

需求描述 表格可以整体编辑&#xff1b;也可以单行弹框编辑&#xff1b;且整体编辑的时候&#xff0c;依然可以单行编辑 编辑只能给某一列&#xff08;这里是参数运行值&#xff09;修改&#xff0c;且根据数据内容的参数范围来判断展示不同的形式&#xff1a;input/数字输入/单…

小波卷积:为计算机视觉任务开辟新的参数效率之路

论文复述 这篇论文介绍了一种创新的卷积神经网络层——WTConv&#xff0c;它通过小波变换技术显著扩展了CNN的感受野&#xff0c;同时保持了参数效率。WTConv层能够实现对输入数据的多频率响应&#xff0c;增强了模型对形状而非纹理的特征识别能力&#xff0c;提高了在图像分类…

黑神话悟空不只是玩游戏 有人用它3天赚了85W

这几天你是不是在想办法升级电脑配置&#xff0c;买PS5玩黑神话悟空游戏&#xff0c;每一个男人看到那么好的游戏画面&#xff0c;都控制不住想玩&#xff0c;今天分享给大家一些资料&#xff0c;让你快速玩游戏的同时&#xff0c;还能挣点外快&#xff0c;黑神话悟空不只是玩游…

MATLAB 计算两点沿某个方向的间距(81)

MATLAB 计算两点沿某个方向的间距(81) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 上一章介绍了如何计算点到空间直线的距离,这里进一步的,我们也可以计算两个点,沿着某个方向的距离,这在很多处理中都会使用到,实际上就是将两点投影到该方向的直线,再计算间距…

线性表复习之初始化顺序表操作

线性表的顺序表示-初始化顺序表 代码 #include <stdio.h> #define MaxSize 10 // 定义最大长度typedef struct{int data[MaxSize]; // 申请空间&#xff08;静态&#xff09;int length; // 当前长度 }SqList;void InitList(SqList &L){for (int i 0; i < MaxS…

java-队列--黑马

队列 别看这个&#xff0c;没用&#xff0c;还是多刷力扣队列题 定义 队列是以顺序的方式维护一组数据的集合&#xff0c;在一端添加数据&#xff0c;从另一端移除数据。一般来讲&#xff0c;添加的一端称之尾&#xff0c;而移除一端称为头 。 队列接口定义 // 队列的接口定…

河南萌新联赛2024第(六)场:郑州大学

目录 A-装备二选一&#xff08;一&#xff09;_河南萌新联赛2024第&#xff08;六&#xff09;场&#xff1a;郑州大学 (nowcoder.com) 思路&#xff1a; 代码&#xff1a; B-百变吗喽_河南萌新联赛2024第&#xff08;六&#xff09;场&#xff1a;郑州大学 (nowcoder.com) …

3DsMax将两个模型的UV展到一个UV上面

3DsMax将两个模型的UV展到一个UV上面 3Dmax中的准备工作 创建一个方块&#xff0c;一个球体&#xff0c;模拟两个模型 添加修改器 打开UV编辑器&#xff0c;快速剥 使用缩放工具&#xff0c;缩放UV&#xff0c;放到一个位置 选择正方形&#xff1a;添加修改器&#xff0…

8.3 数据库基础技术-关系代数

并、交、差 笛卡尔积、投影、选择 自然连接 真题

宝塔面板配置node/npm/yarn/pm2....相关全局变量 npm/node/XXX: command not found

1.打开终端 , cd 到根目录 cd / 2.跳转至node目录下,我的node版本是v16.14.2 cd /www/server/nodejs/v16.14.2/bin 2.1 如果不知道自己node版本多少就跳转到 cd /www/server/nodejs 然后查找当前目录下的文件 ls 确定自己的node版本 cd /node版本/bin 3.继续查看bin…

天润融通助力呷哺呷哺:AI技术赋能3000万会员精细化运营

呷哺集团于1998年11月在北京成立&#xff0c;以“一人一锅”台式小火锅的用餐模式&#xff0c;以及其推出的多样化套餐与良好的用餐服务赢得了众多消费者的青睐&#xff0c;并迅速在市场上占据了一席之地。经过20多年的发展&#xff0c;呷哺呷哺已成为一个多品牌经营、全产业链…

基于Android的安全知识学习APP的设计与实现(论文+源码)_kaic

基于Android的安全知识学习APP的设计与实现 摘 要 随着科技的进步&#xff0c;智能手机已经成为人们工作、学习和生活的必需品。基于Android系统的强大功能&#xff0c;使用Java语言、Linux操作系统&#xff0c;搭配Android Studio&#xff0c;并配备Android开发插件&#…

Unet改进3:在不同位置添加NAMAttention注意力机制

本文内容:在不同位置添加NAMAttention注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 识别不太显著的特征是模型压缩的关键。然而,它在革命性的注意机制中尚未得到研究。在这项工作中,我们提出了一种新的基于归一化的注意力模块(NAM),它抑制…

广州自闭症学校哪家好?

在广州&#xff0c;选择一家适合自闭症儿童的康复学校是一个需要慎重考虑的决定。在众多机构中&#xff0c;星启帆自闭症儿童康复机构以其专业的师资团队、全面的康复服务以及温馨的学习环境脱颖而出&#xff0c;成为众多家长信赖的选择。 星启帆自闭症康复中心&#xff0c;作…