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
  • 提供精确的时间测量和单位转换功能。
相关推荐
zym大哥大27 分钟前
C++多线程函数介绍
c++
懒羊羊大王&1 天前
模版进阶(沉淀中)
c++
owde1 天前
顺序容器 -list双向链表
数据结构·c++·链表·list
GalaxyPokemon1 天前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
W_chuanqi1 天前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
tadus_zeng1 天前
Windows C++ 排查死锁
c++·windows
EverestVIP1 天前
VS中动态库(外部库)导出与使用
开发语言·c++·windows
胡斌附体1 天前
qt socket编程正确重启tcpServer的姿势
开发语言·c++·qt·socket编程
GalaxyPokemon1 天前
Muduo网络库实现 [十] - EventLoopThreadPool模块
linux·服务器·网络·c++
守正出琦1 天前
日期类的实现
数据结构·c++·算法