std::chrono库
<chrono>
均被定义在std::chrono
下,在C++11
推出
<chrono>
库定义三种主要类型以及工具函数和常用typedef
:
- 时钟(
clock
) - 时长(
duration
) - 时间点(
time_point
)
时钟
时钟 | 说明 |
system_clock |
来自系统范畴实时时钟的挂钟时间(可以不单调:系统时间可以在任何时候被调节。唯一有能力映射其时间点到C风格时间 |
steady_clock |
决不会调整的单调时钟 |
high_resolution_clock |
拥有可用的最短嘀嗒周期的时钟(不同标准库实现不一样,避免使用) |
成员函数:
now()
:表示当前时间点
system_clock::to_time_t
:转换为time_t
类型
system_clock::from_time_t
:从time_t
转换为时间点
时长
duration
由时间跨度组成,定义为某时间单位的某个计次数。例如,“42秒”可表示为由42个1秒时间点位的计次所组成的时长。
duration::count()
函数返回返回计次的计数
duration::duration_cast
转换 duration 为不同类型 ToDuration 的时长。
template <class ToDuration, class Rep, class Period>
constexpr ToDuration duration_cast(const duration<Rep,Period>& d);
// 参数
// d - 要转换的 duration
// 返回值
// 转换为 ToDuration 类型时长的 d 。
为方便使用,有预先定义好的宏
类型 | 定义 | 含义 |
nanoseconds | duration</至少 64 位的有符号整数类型/, std::nano> | 纳秒 |
microseconds | duration</至少 55 位的有符号整数类型/, std::micro> | 微秒 |
milliseconds | duration</至少 45 位的有符号整数类型/, std::milli> | 毫秒 |
seconds | duration</至少 35 位的有符号整数类型/> | 秒 |
minutes | duration</至少 29 位的有符号整数类型/, std::ratio<60» | 分 |
hours | duration</至少 23 位的有符号整数类型/, std::ratio<3600» | 小时 |
时间点
time_point
表示时间中的一个点
std::time
定义于头文件<ctime>
,std::time_t time( std::time_t* arg );
返回编码为std::time_t
对象的当前日历时间,并将它存储于arg
所指向的对象,除非arg
是空指针。
std::tm* localtime( const std::time_t *time );
,转换作为 std::time_t 值的从纪元起时间到以本地时间表达的日历时。
示例
计算耗时以毫秒计算
#include <chrono>
#include <iostream>
using namespace std::chrono;
int main() {
auto start = steady_clock::now();
int cnt = 0;
for (int i = 0; i < 100000000; i++) {
cnt++;
}
auto end = steady_clock::now();
auto rep = duration_cast<milliseconds>(end - start).count();
std::cout << "耗时"<<rep<<"ms";
return 0;
}