我正在尝试使用以下代码:
std::chrono::high_resolution_clock::now();
获取时间戳,但我需要它作为 double ,但它不是支持的数据类型,自动工作,但我无法操作它。
最佳答案
你的“时间戳”就是<chrono>
图书馆调用 time_point
. time_point
是时钟和持续时间的集合。持续时间是表示和周期的集合。
您已经指定了这三个中的两个:
-
clock == high_resolution_clock
-
representation == double
-
period ==
?
您的经期可以是nano
( ratio<1, 1000000000>
), milli
( ratio<1, 1000>
), seconds
( ratio<1>
), minutes
( ratio<60>
) 或任何其他与秒的合理关系。
例如,假设您想要一个时间戳,使用 double 作为表示形式并使用秒作为周期。这看起来像这样:
using clock = std::chrono::high_resolution_clock;
using dsec = std::chrono::duration<double>;
using tps = std::chrono::time_point<clock, dsec>;
tps tp = clock::now();
time_point
由 high_resolution_clock::now()
发出将隐式转换为您的 time_point
使用 double 的表示和 ratio<1> 的周期。自 high_resolution_clock
的纪元以来,它将保持小数秒.
通常,因为您的目标类型具有浮点表示形式,所以所有 time_point 源类型都将隐式转换为它。要反向转换,您需要使用 std::chrono::time_point_cast<some-duration>(source-time_point)
.
相反,如果您想保留基于 double 的纳秒,则看起来像:
using clock = std::chrono::high_resolution_clock;
using dns = std::chrono::duration<double, std::nano>;
using tpns = std::chrono::time_point<clock, dns>;
tpns tp = clock::now();
作为指导,我建议使用 system_clock
或 steady_clock
, 但不是 high_resolution_clock
.使用 system_clock
如果你的 time_point
需要与民用日历有某种关系,或者需要跨进程保持意义。使用 steady_clock
如果你的 time_point
仅在同一过程中的短时间内使用。
high_resolution_clock
是(事实上)始终是 system_clock
的别名或 steady_clock
.因此,您不妨使用后者之一,并且知道您得到了什么。
using clock = std::chrono::system_clock;
using dsec = std::chrono::duration<double>;
using tps = std::chrono::time_point<clock, dsec>;
tps tp = clock::now();
关于c++ - 如何获得双倍的高分辨率时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34780897/