【C++基础】chrono

1、chrono介绍

chrono 是 C++ 标准库中的一个头文件,提供了处理日期、时间、时钟等时间相关操作的功能。它在 C++11 标准中引入,提供了更方便、更强大的时间处理功能。

1.1
std::chrono::duration: 代表时间段,可以表示一段时间的长度,以不同的时间单位表示,例如秒、毫秒、微秒等。

std::chrono::time_point: 代表时间点,它是相对于某个时间点的持续时间。

std::chrono::system_clock: 提供了当前的系统时间,可以用来获取当前时间点。

std::chrono::steady_clock: 与 system_clock 类似,但提供的时间点递增稳定,不受系统时间调整的影响。

std::chrono::high_resolution_clock: 提供了最高精度的时钟,通常基于 steady_clock 实现。

这些类可以用来执行各种时间相关的操作,比如测量时间间隔、等待一段时间、处理时间点等。使用 <chrono> 库可以帮助你编写更加可靠
和可移植的时间相关代码。

1.2 类型别名
常用的类型别名和函数,以简化时间相关操作的代码编写。
std::chrono::millisecondsstd::chrono::secondsstd::chrono::minutesstd::chrono::hours 等:代表不同时间单位的类型别名,用于表示时间段(duration)的长度。

/// nanoseconds
using nanoseconds	= duration<_GLIBCXX_CHRONO_INT64_T, nano>;/// microseconds
using microseconds	= duration<_GLIBCXX_CHRONO_INT64_T, micro>;/// milliseconds
using milliseconds	= duration<_GLIBCXX_CHRONO_INT64_T, milli>;/// seconds
using seconds	= duration<_GLIBCXX_CHRONO_INT64_T>;/// minutes
using minutes	= duration<_GLIBCXX_CHRONO_INT64_T, ratio< 60>>;/// hours
using hours		= duration<_GLIBCXX_CHRONO_INT64_T, ratio<3600>>;

1.3 函数

std::chrono::duration_cast:用于将一个时间段转换为另一个时间段的函数。
std::chrono::time_point_cast:用于将一个时间点转换为另一个时间点的函数。
std::chrono::duration::count:返回时间段的长度,以其持续时间单位计数的函数。
std::chrono::time_point::time_since_epoch:返回时间点相对于纪元的持续时间的函数。
std::chrono::system_clock::now:获取当前系统时间点的函数。
std::chrono::steady_clock::now:获取当前稳定时钟时间点的函数。
std::chrono::high_resolution_clock::now:获取当前高分辨率时钟时间点的函数。

通过使用这些类型别名和函数,可以更方便地进行时间相关的计算和操作。

2、demo

2.1测量程序执行时间

#include <iostream>
#include <chrono>int main() {auto start = std::chrono::steady_clock::now();// 模拟一个耗时操作for (int i = 0; i < 1000000; ++i) {// Do something}auto end = std::chrono::steady_clock::now();auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();std::cout << "程序执行时间: " << duration << " 毫秒\n";return 0;
}

2.2等待一段时间

#include <iostream>
#include <chrono>
#include <thread>int main() {std::cout << "开始等待...\n";// 等待 1 秒钟std::this_thread::sleep_for(std::chrono::seconds(1));std::cout << "等待结束\n";return 0;
}

2.3获取当前系统时间

#include <iostream>
#include <chrono>
#include <ctime>int main() {auto now = std::chrono::system_clock::now();auto time = std::chrono::system_clock::to_time_t(now);std::cout << "now time: " << std::ctime(&time) << std::endl;return 0;
}

2.4定时执行任务

#include <iostream>
#include <chrono>
#include <thread>void task() {std::cout << "任务执行\n";
}int main() {std::cout << "开始定时执行任务\n";// 每隔1秒执行一次任务while (true) {task();std::this_thread::sleep_for(std::chrono::seconds(1));}return 0;
}

2.5格式化打印当前时间:

#include <iostream>
#include <iomanip>
#include <chrono>
#include <ctime>int main() {// 获取当前时间点auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());// 将时间点转换为 struct tm 结构体,以便可以使用 std::put_time 函数进行格式化struct std::tm* time_info = std::localtime(&now);// 使用 std::put_time 格式化时间并将其存储为字符串std::stringstream ss;ss << std::put_time(time_info, "%Y-%m-%d %H:%M:%S");std::string time_str = ss.str();std::cout << "Current time as string: " << time_str << std::endl;return 0;
}

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

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

相关文章

C/C++字符串操作

C/C对字符串的操作提供了丰富的函数库&#xff0c;这些函数可以用于创建、修改、比较和搜索字符串等。以下是一些常用的字符串操作函数及其使用说明&#xff1a; C语言中的字符串操作 在C语言中&#xff0c;字符串通常以字符数组的形式存在&#xff0c;并以空字符&#xff08…

SpringBoot中注册Bean的方式汇总

文章目录 ComponentScan Componet相关注解BeanImportspring.factories总结Configuration和Component的主要区别&#xff1f;Bean是不是必须和Configuration一起使用&#xff1f;Import导入配置类有意义&#xff1f;出现异常&#xff1a;java.lang.NoClassDefFoundError: Could…

大语言模型总结整理(不定期更新)

《【快捷部署】016_Ollama&#xff08;CPU only版&#xff09;》 介绍了如何一键快捷部署Ollama&#xff0c;今天就来看一下受欢迎的模型。 模型简介gemmaGemma是由谷歌及其DeepMind团队开发的一个新的开放模型。参数&#xff1a;2B&#xff08;1.6GB&#xff09;、7B&#xff…

TCP协议--传输机制

TCP协议原理 TCP协议是对数据传输提供的一个管控机制&#xff0c;主要体现在可靠和效率两个方面&#xff0c;即在保证数据可靠传输的情况下尽可能的提高效率 可靠传输机制 确认应答机制 向对方发送一个数据报&#xff0c;对方要返回一个确认应答的数据报 实现的方式&#x…

文心一言 VS 讯飞星火 VS chatgpt (236)-- 算法导论17.3 2题

二、使用势能法重做练习17.1-3。练习17.1-3的内容是&#xff1a;假定我们对一个数据结构执行一个由 n 个操作组成的操作序列&#xff0c;当 i 严格为 2 的幂时第 i 个操作的代价为 i &#xff0c;否则代价为1。使用聚合分析确定每个操作的摊还代价。如果要写代码&#xff0c;请…

JAVA实现人工智能,采用框架SpringAI

Spring AI介绍 Spring AI是AI工程师的一个应用框架&#xff0c;它提供了一个友好的API和开发AI应用的抽象&#xff0c;旨在简化AI应用的开发工序&#xff0c;例如开发一款基于ChatGPT的对话应用程序。 项目地址&#xff1a;https://github.com/spring-projects-experimental/sp…

AGV小车导航避障雷达SE-0533(CNS-LS05C)激光传感器RS232|RS485|CAN BUS连线说明

AGV小车导航避障雷达SE-0533(CNS-LS05C)激光传感器广泛应用到AGV小车&#xff0c;RGV小车&#xff0c;无人叉车、搬运机器人等领域。本文重点介绍AGV小车导航避障雷达SE-0533(CNS-LS05C)激光传感器RS232|RS485|CAN BUS连线说明。 一、线序定义 1、传感器线缆线序定义 SE-053…

用栈来模拟队列

思路&#xff1a;首先栈是先进后出&#xff0c;队列是先进先出&#xff0c;所以用两个栈来模拟队列&#xff0c;一个用来进&#xff0c;一个用来出&#xff0c;用来进的再弹给用来出的便是队列的顺序了&#xff0c;具体代码如下 class MyQueue { public: stack<int> sa…

分层风格的软件架构设计概念及其实际应用

摘要 分层风格的软件架构是一种将系统功能分解成多个层次的设计模式&#xff0c;每个层次负责特定的功能&#xff0c;层与层之间通过定义良好的接口进行交互。这种架构风格广泛应用于多种软件系统&#xff0c;如企业应用、操作系统和网络协议等。本文将探讨分层架构的基本概念…

C++引用和右值引用

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

postgis导入shp数据时“dbf file (.dbf) can not be opened.“

作者进行矢量数据导入数据库中出现上述报错 导致报错原因 导入的shp文件路径太深导入的shp文件名称或路径中有中文将需要导入数据的shp 文件、dbf 文件、prj 等文件放在到同一个文件夹内&#xff0c;且名字要一致&#xff1b;导入失败&#xff1a; 导入成功&#xff1a;

js基础知识+练习

一&#xff0c;JavaScript简单了解 1.什么是JavaScript JavaScript简称JS&#xff0c;是较为流行的一种前端编程语言&#xff0c;是一种脚本语言&#xff0c;通过解释器运行&#xff0c;主要在客户端&#xff08;浏览器&#xff09;上运行&#xff0c;现在也可以基于node.js在服…

Python实现外观模式、桥接模式、组合模式和享元模式

今天介绍四种结构型设计模式&#xff1a;外观模式、桥接模式、组合模式和享元模式 外观模式 外观模式&#xff08;Facade Pattern&#xff09;&#xff0c;它为子系统提供一个统一的接口&#xff0c;使得子系统更加容易使用。 在Python中&#xff0c;我们可以通过定义一个外…

MYSQL08_页的概述、内部结构、文件头、文件尾、最大最小记录、页目录、区段表

文章目录 ①. 页的概述、大小②. 页的内部结构③. 第一部分 - 文件头④. 第一部分 - 文件尾⑤. 第二部分 - 空闲、用户记录、最大最小⑥. 第三部分 - 页目录⑦. 第三部分 - 页面头部⑧. 从数据页角度看B树⑨. 区、段和表、碎片区 ①. 页的概述、大小 ①. 数据库的存储结构&…

YOLO系列汇总 | 持续更新

文章目录 1 YOLOv1(2015, Joseph Redmon)2 YOLOv2(2016, Joseph Redmon)3 YOLOv3(2018, Joseph Redmon)4 YOLOv4(2020, Alexey Bochkovskiy, Chien-Yao Wang)5 YOLOV5(2021&#xff0c;Ultralytics)6 YOLOX(2021, Megvii旷视)7 YOLOv6(2022&#xff0c;美团)8 YOLOv7(2022&…

【深度学习】多层感知机与卷积神经网络解析

引言&#xff1a; 在人工智能的宏伟画卷中&#xff0c;深度学习如同一笔瑰丽而深邃的色彩&#xff0c;为这幅画增添了无限的生命力和潜能。作为支撑这一领域核心技术的基石&#xff0c;多层感知机&#xff08;MLP&#xff09;和卷积神经网络&#xff08;CNN&#xff09;在模仿人…

vivado ila 运行触发器、停止触发器、使用自动重新触发

运行触发器 您可在 2 种不同模式下运行或装备 ILA 核触发器 &#xff1a; • “ Run Trigger ” &#xff1a; 选择要装备的 ILA 核 &#xff0c; 然后单击“ ILA 仪表板 (ILA Dashboard) ”窗口或“硬件 (Hardware) ”窗口 工具栏上的“ Run Trigger ”按钮即可装备 IL…

MySQL :事务隔离级别实现方法

事务具有四个特性 原子性&#xff0c;要么全成功要么全失败&#xff0c;通过undo log实现持久性&#xff0c;不会因为断电等特殊情况造成数据丢失&#xff0c;通过redo log实现隔离性&#xff0c;事务之间互相不干扰&#xff0c;通过MVCC实现一致性&#xff0c;事务执行前后整…

双指针运用:删除重复元素、移除元素

26.删除重复元素 题目描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元…

Android Gradle开发与应用 (八) :Kotlin DSL

1. 前言 本文介绍了Gradle Kotlin DSL相关的一些知识点 2. DSL是什么 DSL是为特定领域设计的专门的语言&#xff0c;也就是设计了一门语言&#xff0c;然后解决某个特定的领域的特定问题。 2.1 举例说明 以下的这些都可以称之为DSL 正则表达式 :用于文本处理的特定语言SQ…