Android常用C++特性之std::chrono
声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。
std::chrono
是 C++11 引入的标准库中的时间处理工具,提供了以多种精度进行时间测量、处理和操作的功能。它允许开发者处理时间点(time_point
)和时间间隔(duration
),并且支持从高精度(如纳秒)到较大单位(如秒、分钟)的转换。
主要组件
std::chrono
主要由以下几个组件组成:
- 时间点 (
time_point
):表示一个特定的时间。 - 时间间隔 (
duration
):表示两个时间点之间的差异。 - 时钟 (
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
#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_clock
或 std::chrono::steady_clock
。
示例:使用 time_point
#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
提供了三种常用的时钟类型,用于获取当前时间点:
std::chrono::system_clock
:表示系统时间,通常用于获取当前的时间和日期。std::chrono::steady_clock
:表示单调递增的时钟,适用于计算时间间隔,不会被系统时间调整所影响。std::chrono::high_resolution_clock
:表示高精度的时钟,是steady_clock
或system_clock
的别名,取决于实现。
示例:使用 system_clock
#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(¤t_time) << std::endl;
return 0;
}
4. 时间单位的转换
可以使用 std::chrono::duration_cast
来进行时间单位之间的转换。
示例:单位转换
#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_clock
或 high_resolution_clock
可以精确测量操作的执行时间。
示例:测量操作的执行时间
#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_clock
、steady_clock
和high_resolution_clock
。 - 提供精确的时间测量和单位转换功能。