std :: chrono :: high_resolution_clock的用途是什么?

ant*_*_rh 15 c++ time clock c++11 c++-chrono

起初我认为它可以用于性能测量.但它std::chrono::high_resolution_clock可能是不稳定(is_steady可能false).据说std::chrono::high_resolution_clock甚至可能是别名std::chrono::system_clock通常不稳定.所以我无法用这种类型的时钟来测量时间间隔,因为在任何时刻都可以调整时钟并且我的测量结果是错误的.

同时我无法将时间点转换std::chrono::high_resolution_clock为日历时间,因为它没有to_time_t方法.所以我也无法用这种类型的时钟获得实时.

那可以std::chrono::high_resolution_clock用什么呢?

How*_*ant 17

没有了.

对不起,我的不好.

如果您想要使用high_resolution_clock,请选择steady_clock.在libc ++和VS high_resolution_clocksteady_clock无论如何都是一个类型别名.

在gcc上high_resolution_clock是一个类型的别名,system_clockhigh_resolution_clock::to_time_t在这个平台上看到过多次使用(这是错误的).

不要使用<chrono>.但是<chrono>你应该避免一些部分.

  • 不要用high_resolution_clock.
  • 避免使用.count().time_since_epoch()除非没有其他方法来完成工作.
  • duration_cast除非代码在没有代码的情况下不能编译,否则你应该避免,并且你希望截断为零的行为.
  • 如果隐式转换编译,则避免使用显式转换语法.

  • @Julien:`.count()`和`.time_since_epoch()`很像`reinterpret_cast`。它们极大地改变了类型,以至于改变了值的含义。有时这是必要的。但是,如果您可以避免它,“chrono”将通过确保您对时间单位的使用保持一致,在编译时为您捕获更多逻辑错误。 (6认同)
  • 我使用“steady_clock”来表示我希望简短的计时,否则使用“system_clock”。“简短”是一个模糊的术语。称之为 1 秒或 1 分钟。我_确实_使用“持续时间”。但如果我希望截断为零行为,我只会使用“duration_cast”。不要使用“duration_cast”(例如)将秒转换为毫秒。隐式转换可以很好地实现这一点。使用“duration_cast”将毫秒转换为秒。不要使用 `.count()` 除非您需要将其用于打印语句。即便如此,我还是更喜欢 C++20,或者 https://github.com/HowardHinnant/date/blob/master/include/date/date.h。 (5认同)
  • 是的。当我们过渡到 C++20 时,`.count()` 应该变得不再那么必要了。例如,您将能够在没有“.count()”的情况下打印出您的持续时间。 (4认同)
  • chrono 视频 1h 教程:https://www.youtube.com/watch?v=P32hvk8b13M (3认同)
  • 你能详细说明“避免使用`.count()`和`.time_since_epoch()`”部分吗?这些函数背后隐藏着什么警告? (2认同)