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

时间:2016-05-25 02:30:15

标签: c++ c++11 time clock chrono

起初我认为它可以用于性能测量。但是said 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可以用于什么?

2 个答案:

答案 0 :(得分:16)

没有。

抱歉,my bad

如果您想使用// NOT WORKING EXAMPLE public class StartGUI extends JFrame { tabbedPane = new JTabbedPane(); tabbedPane.addTab("Search", new SearchTapController() ); } // WORKING EXAMPLE public class StartGUI extends JFrame { tabbedPane = new JTabbedPane(); tabbedPane.addTab("Search", SearchTapViewImpl() ); } ,请选择high_resolution_clock。在libc ++和VS steady_clock上是high_resolution_clock的类型别名。

在gcc上steady_clockhigh_resolution_clock的类型别名,我在这个平台上看到过多次使用system_clock(这是错误的)。

执行使用high_resolution_clock::to_time_t。但是你应该避免使用<chrono>的部分内容。

  • 请勿使用<chrono>
  • 避免使用high_resolution_clock.count(),除非没有其他方法可以完成工作。
  • 避免使用.time_since_epoch(),除非代码在没有它的情况下进行编译,并且您希望截断为零行为。
  • 如果隐式转换编译,则避免使用显式转换语法。

答案 1 :(得分:4)

我建议单独使用高分辨率时钟可以谎言。

如果您的算法使用许多测量值,那么任何错误都应该是平均值,并且您应该能够测量非常小的间隔。

我已经使用高分辨率时钟在网络事件中构建时间线,否则我的间隔将全部为0。 :)

最后,考虑到虽然你的系统时钟可能不稳定,但如果你的高分辨率时钟是替代,这大大简化了你必须玩的一些游戏,以确保时间总是向前流动。

总之,是的,它可能会失败,但是当你拥有它时,它会非常有帮助。很多样品都是你的朋友。 :)