gpt4 book ai didi

c++ - 如何获得双倍的高分辨率时间戳?

转载 作者:行者123 更新时间:2023-11-28 05:53:08 24 4
gpt4 key购买 nike

我正在尝试使用以下代码:

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_pointhigh_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_clocksteady_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com