【问题标题】:std::chrono::high_resolution_clock - time measurementstd::chrono::high_resolution_clock - 时间测量
【发布时间】:2017-08-31 15:30:42
【问题描述】:

我现在正在学习,但我不明白一件事。

#include <iostream>
#include <chrono>

int main()
{
    auto t1 = std::chrono::high_resolution_clock::now();
    int a = 0;
    auto t2 = std::chrono::high_resolution_clock::now();
    auto result = t2 - t1;
    std::cout << result.count() << std::endl;
    return 0;
}

在这种情况下,“结果”的值等于“0”。

#include <iostream>
#include <chrono>

int main()
{
    auto t1 = std::chrono::steady_clock::now();
    int a = 0;
    auto t2 = std::chrono::steady_clock::now();
    auto result = t2 - t1;
    std::cout << result.count() << std::endl;
    return 0;
}

在这种情况下,“结果”大约等于“5500”。

我是不是做错了什么?

【问题讨论】:

    标签: c++ time chrono


    【解决方案1】:

    没有。只是不同的时钟可以有不同的精度,这么短的时间可能不会超过一个时钟的 1 个滴答声。

    您可以通过检查clock::duration::period::numclock::duration::period::den 找出时钟的精度。

    此外,&lt;chrono&gt; 的一些实现多年来一直存在“实现质量”问题。因此,当您切换编译器,甚至是同一编译器的版本时,您的体验可能会发生变化。如果您可以使用最新版本的编译器,您的体验通常会更好。

    Here is a video tutorial for &lt;chrono&gt;.

    【讨论】:

    • 我知道不同的精度,但是当我试图“计算” high_resolution_clock 的精度时,它等于 stable_clock 的精度。是否有可能“int a = 0;”需要不到 1 纳秒或什么的?
    • @PaulNewman:您的 std::lib 对high_resolution_clock 的实现很可能不是很好。 VS-13?您可以升级到 VS-15 或 VS-17 吗?在我的平台上,对high_resoluiton_clocksteady_clock 的连续调用总是输出一个更新的值(即使在调用now 之间没有任何内容)。
    • 我实际上使用的是 gcc 6.1.0 编译器。
    • 有趣。这是我看到的关于该编译器这种行为的第一份报告。这让我想知道编译器是否通过调用now 进行了一些“创造性”优化。另一种可能性是high_resolution_clock 的实现在后台调用了只有微秒精度的东西,并且只是吹嘘纳秒精度。
    • 这是一个糟糕的时钟。它以每 0.015625 秒一次的速度滴答作响。我有一个祖父摆钟,它做得几乎那么好。 ;-)
    猜你喜欢
    • 2014-03-23
    • 2017-09-02
    • 2013-11-12
    • 2013-04-24
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2017-11-25
    相关资源
    最近更新 更多