Android常用C++特性之std::chrono

声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。

std::chrono 是 C++11 引入的标准库中的时间处理工具,提供了以多种精度进行时间测量、处理和操作的功能。它允许开发者处理时间点(time_point)和时间间隔(duration),并且支持从高精度(如纳秒)到较大单位(如秒、分钟)的转换。

主要组件

std::chrono 主要由以下几个组件组成:

  1. 时间点 (time_point):表示一个特定的时间。
  2. 时间间隔 (duration):表示两个时间点之间的差异。
  3. 时钟 (clock):用于获取当前时间的工具。

1. duration(时间间隔)

std::chrono::duration 用于表示两个时间点之间的时间差异,可以以不同的时间单位表示,如秒、毫秒、微秒、纳秒等。常见的时间单位有:

  • std::chrono::nanoseconds:以纳秒为单位的时间间隔。
  • std::chrono::microseconds:以微秒为单位的时间间隔。
  • std::chrono::milliseconds:以毫秒为单位的时间间隔。
  • std::chrono::seconds:以秒为单位的时间间隔。
  • std::chrono::minutes:以分钟为单位的时间间隔。
  • std::chrono::hours:以小时为单位的时间间隔。
示例:使用 duration
cpp 复制代码
#include <iostream>
#include <chrono>

int main() {
    std::chrono::seconds sec(1);              // 1 秒
    std::chrono::milliseconds ms = sec;       // 将秒转换为毫秒
    std::chrono::nanoseconds ns = sec;        // 将秒转换为纳秒

    std::cout << "1 second is " << ms.count() << " milliseconds." << std::endl;
    std::cout << "1 second is " << ns.count() << " nanoseconds." << std::endl;

    return 0;
}

2. time_point(时间点)

std::chrono::time_point 用于表示某一时刻的时间点。time_point 通常结合时钟使用,比如 std::chrono::system_clockstd::chrono::steady_clock

示例:使用 time_point
cpp 复制代码
#include <iostream>
#include <chrono>
#include <thread>

int main() {
    // 获取当前时间点
    auto start = std::chrono::steady_clock::now();

    // 模拟一些工作
    std::this_thread::sleep_for(std::chrono::milliseconds(500));

    // 获取结束时间点
    auto end = std::chrono::steady_clock::now();

    // 计算经过的时间
    std::chrono::duration<double> elapsed_seconds = end - start;

    std::cout << "Elapsed time: " << elapsed_seconds.count() << " seconds." << std::endl;

    return 0;
}

3. clock(时钟)

std::chrono 提供了三种常用的时钟类型,用于获取当前时间点:

  1. std::chrono::system_clock:表示系统时间,通常用于获取当前的时间和日期。
  2. std::chrono::steady_clock:表示单调递增的时钟,适用于计算时间间隔,不会被系统时间调整所影响。
  3. std::chrono::high_resolution_clock :表示高精度的时钟,是 steady_clocksystem_clock 的别名,取决于实现。
示例:使用 system_clock
cpp 复制代码
#include <iostream>
#include <chrono>
#include <ctime>

int main() {
    // 获取系统时间
    auto now = std::chrono::system_clock::now();

    // 将时间点转换为 time_t 类型
    std::time_t current_time = std::chrono::system_clock::to_time_t(now);

    std::cout << "Current time: " << std::ctime(&current_time) << std::endl;

    return 0;
}

4. 时间单位的转换

可以使用 std::chrono::duration_cast 来进行时间单位之间的转换。

示例:单位转换
cpp 复制代码
#include <iostream>
#include <chrono>

int main() {
    std::chrono::seconds sec(1);

    // 将 1 秒转换为毫秒
    std::chrono::milliseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>(sec);

    std::cout << "1 second is " << ms.count() << " milliseconds." << std::endl;

    return 0;
}

5. 测量时间间隔

使用 steady_clockhigh_resolution_clock 可以精确测量操作的执行时间。

示例:测量操作的执行时间
cpp 复制代码
#include <iostream>
#include <chrono>
#include <thread>

int main() {
    // 开始计时
    auto start = std::chrono::high_resolution_clock::now();

    // 模拟长时间操作
    std::this_thread::sleep_for(std::chrono::seconds(2));

    // 结束计时
    auto end = std::chrono::high_resolution_clock::now();

    // 计算耗时
    std::chrono::duration<double> elapsed = end - start;

    std::cout << "Operation took: " << elapsed.count() << " seconds." << std::endl;

    return 0;
}

总结

  • std::chrono 是 C++11 中提供的时间库,用于处理时间点和时间间隔。
  • 通过 duration 表示时间间隔,time_point 表示时间点。
  • 支持不同精度的时间单位,如纳秒、毫秒、秒等。
  • 提供了三种常用时钟类型:system_clocksteady_clockhigh_resolution_clock
  • 提供精确的时间测量和单位转换功能。
相关推荐
进击的荆棘1 小时前
C++起始之路——哈希表的实现
数据结构·c++·散列表·哈希
t***5447 小时前
如何配置Orwell Dev-C++使用Clang
开发语言·c++
CoderCodingNo8 小时前
【信奥业余科普】C++ 的奇妙之旅 | 13:为什么 0.1+0.2≠0.3?——解密“爆int”溢出与浮点数精度的底层原理
开发语言·c++
极客智造9 小时前
深入详解 C++ 智能指针:RAII 原理、分类特性、底层机制与工程实战
c++·智能指针
王璐WL10 小时前
【C++】类的默认成员函数(上)
c++
王老师青少年编程11 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:区间覆盖(加强版)
c++·算法·贪心·csp·信奥赛·区间贪心·区间覆盖(加强版)
宏笋11 小时前
C++11完美转发的作用和用法
c++
格发许可优化管理系统11 小时前
MathCAD许可类型全面解析:选择最适合您的许可证
c++
旖-旎12 小时前
深搜(二叉树的所有路径)(6)
c++·算法·leetcode·深度优先·递归
GIS阵地12 小时前
QGIS的分类渲染核心类解析
c++·qgis·开源gis