gpt4 book ai didi

c++ - 基于 std::chrono::high_resolution_clock 的帧定时器

转载 作者:行者123 更新时间:2023-12-05 00:53:44 25 4
gpt4 key购买 nike

多年来,我一直在为帧计时器使用以下时钟定义:

    using frame_clock = std::conditional_t<
std::chrono::high_resolution_clock::is_steady,
std::chrono::high_resolution_clock,
std::chrono::steady_clock>;

换句话说,我想要使用尽可能高的分辨率定义的时钟,但它必须单调递增。请注意,MSVC 当前使用以下别名来定义 std::chrono::high_resolution_clock:

    using high_resolution_clock = steady_clock;

因此,在 MSVC 上,我定义的别名将只使用 std::chrono::steady_clock。对于 libstdc++ 和 libc++ 不一定如此,因此使用别名。

最近,我在这里偶然发现了一个脚注:https://en.cppreference.com/w/cpp/chrono/high_resolution_clock

请注意,cppreference 明确不鼓励使用 std::chrono::high_resolution_clock。他们的理由是时钟因实现而异......但对于 std::chrono::steady_clockstd::chrono::system_clock 来说不是这样?例如,我找不到任何东西可以保证时钟之间的时钟周期必须以特定单位为单位。事实上,我理解这是设计使然

我的问题是,在使用 std::chrono::high_resolution_clock 这么多年(用于帧计时器和基准测试)之后,我应该比我更关心吗?即使在这个网站上,我也看到了许多使用 std::chrono::high_resolution_clock 的建议,尽管这个脚注是这么说的。非常感谢您对这种差异的任何进一步见解,或可能导致问题的示例。

最佳答案

出于实际目的,您只有 3 个选择:

  • 为了获取实时,您唯一的选择是 std::system_clock(如果您想留在 C++ 中,确实存在操作系统级别的例程)
  • 对于测量间隔,如果你想留在 C++ 中,你必须使用 std::steady_clock。没有任何实现可以提供比使用 std::steady_clock
  • 获得的分辨率更高的稳定时钟
  • 如果您急于牺牲 C++ 一致性,则上述可行的替代方法是直接使用 TSC 计数器。这是人们所能看到的最高分辨率,也是使用速度最快的。缺点是,如果您想测量时间单位而不是周期,则必须使用 CPU 周期率将周期转换为秒。

关于c++ - 基于 std::chrono::high_resolution_clock 的帧定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67233593/

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