我正在尝试使用以下代码:
std::chrono::high_resolution_clock::now();
获取时间戳,但我需要它作为双倍,但它不是支持数据类型,自动工作,但我无法操纵它。
答案 0 :(得分:1)
你的&#34;时间戳&#34;是<chrono>
库调用time_point
的内容。 time_point
是时钟和持续时间的集合。持续时间是表示和句点的集合。
你已经指定了这三个中的两个:
clock == high_resolution_clock
representation == double
period ==
?您的时间段可以是nano
(ratio<1, 1000000000>
),milli
(ratio<1, 1000>
),seconds
(ratio<1>
),{{1} }(minutes
)或与秒的任何其他理性关系。
例如,让我们说你想要一个时间戳,使用double作为表示,秒作为句点。这看起来像这样:
ratio<60>
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
将使用double的表示和比率&lt; 1&gt;的句点隐式转换为high_resolution_clock::now()
。从time_point
的时代开始,它将保持小数秒。
通常,因为您的目标类型具有浮点表示,所有time_point源类型将隐式转换为它。要反向转换,您需要使用high_resolution_clock
。
如果您想要保持双倍纳秒,那将看起来像:
std::chrono::time_point_cast<some-duration>(source-time_point)
作为指南,我建议您使用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
答案 1 :(得分:0)
std::chrono::high_resolution_clock::now()
会返回std::time_point<std::chrono::high_resolution_clock>
。在这里,您可以选择是否要使用std::chrono::duration
以纳秒,微秒,毫秒等表示此时间点,并最终将其转换为double
:
std::chrono::time_point<std::chrono::high_resolution_clock> tp = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::micro> dur = tp;
double micros = dur.count();
在这里,您可以用您想要的任何分辨率替换std::micro
。