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
  • 提供精确的时间测量和单位转换功能。
相关推荐
Mr.Wang80917 分钟前
条款23:宁以non-member、non-friend替换member函数
开发语言·c++
以卿a1 小时前
C++ 模板初阶
开发语言·c++
黑不溜秋的7 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
Dream it possible!9 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
柠石榴9 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
王老师青少年编程9 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛
澄澈天空11 小时前
C++ MFC添加RichEditControl控件后,程序启动失败
c++·mfc
Lzc77412 小时前
C++初阶——简单实现vector
c++·简单实现vector
一个小白112 小时前
C++——list模拟实现
开发语言·c++
程序员老舅12 小时前
C++ Qt项目教程:WebServer网络测试工具
c++·qt·测试工具·webserver·qt项目·qt项目实战