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
  • 提供精确的时间测量和单位转换功能。
相关推荐
charlie1145141917 分钟前
C++ STL CookBook
开发语言·c++·stl·c++20
小林熬夜学编程18 分钟前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
倔强的石头10629 分钟前
【C++指南】类和对象(九):内部类
开发语言·c++
A懿轩A2 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
机器视觉知识推荐、就业指导2 小时前
C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
c++
半盏茶香2 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
Ronin3053 小时前
11.vector的介绍及模拟实现
开发语言·c++
✿ ༺ ོIT技术༻3 小时前
C++11:新特性&右值引用&移动语义
linux·数据结构·c++
字节高级特工3 小时前
【C++】深入剖析默认成员函数3:拷贝构造函数
c语言·c++
唐诺9 小时前
几种广泛使用的 C++ 编译器
c++·编译器