时钟由时间起点和计次频率组成,c++中定义了system_clock、steady_clock、high_resolution_clock、utc_clock、tai_clock、gps_clock、file_clock、local_t等时钟。
文章的代码库为:
https://gitee.com/gamestorm577/CppStd
system_clock
表示系统的时钟,system_clock是一个无状态的类,可以获取系统当前的时间点。system_clock中的定义的成员类型为:
typedef microseconds duration;
typedef duration::rep rep;
typedef duration::period period;
typedef chrono::time_point<system_clock> time_point;
now
接口now获取当前的时间点,例如:
using namespace std::chrono;
time_point<system_clock> t = system_clock::now();
printf("t time_since_epoch count %lld\n", t.time_since_epoch().count());
输出结果为:
t time_since_epoch count 1704872340801270
to_time_t
转换系统时钟的时间点为std::time_t,例如:
using namespace std::chrono;
system_clock::time_point t1 = system_clock::now();
std::time_t t2 = system_clock::to_time_t(t1);
printf("t1 time_since_epoch count = %lld\n", t1.time_since_epoch().count());
printf("t2 = %ld\n", t2);
输出结果为:
t1 time_since_epoch count = 1704873328126725
t2 = 1704873328
from_time_t
从std::time_t转换到系统时钟的时间点,例如:
using namespace std::chrono;
std::time_t t1 = 10;
system_clock::time_point t2 = system_clock::from_time_t(t1);
printf("t1 = %ld\n", t1);
printf("t2 time_since_epoch count = %lld\n", t2.time_since_epoch().count());
t1 = 10
t2 time_since_epoch count = 10000000
时间点族
基于system_clock,标准库中定义了几个时间点:
template <class _Duration>
using sys_time = time_point<system_clock, _Duration>;
using sys_seconds = sys_time<seconds>;
using sys_days = sys_time<days>;
todo
steady_clock
steady_clock单调时钟,与系统时间无关,最适合用于度量时间间隔。steady_clock中的定义的成员类型为:
typedef nanoseconds duration;
typedef duration::rep rep;
typedef duration::period period;
typedef chrono::time_point<steady_clock, duration> time_point;
可以看到steady_clock中使用的duration是nanoseconds,比system_clock精确度更高。
now
返回当前的时间点,例如:
using namespace std::chrono;
time_point<steady_clock> t = steady_clock::now();
printf("t time_since_epoch count %lld\n", t.time_since_epoch().count());
输出结果为:
t time_since_epoch count 1749292685820083
high_resolution_clock
high_resolution_clock表示实现提供的拥有最小计次周期的时钟。它可以是system_clock和steady_clock的别名,或者第三种独立的时钟。
utc_clock
todo
tai_clock
todo
gps_clock
todo
file_clock
todo
local_t
todo
is_clock
todo