【问题标题】:Get chrono seconds in float在浮点数中获取计时秒数
【发布时间】:2016-05-30 21:58:47
【问题描述】:

在http://en.cppreference.com/w/cpp/chrono 的示例中,秒值是在double 中获得的。这是我想要的行为。然而,这似乎依赖于时间点减法产生代表秒的值的隐含假设。我找不到任何东西来解释为什么在没有实际指定时间单位的情况下持续时间会产生浮点秒。在完全不使用auto 的情况下,有人可以展示如何以浮点类型显式获取时间单位(例如秒),或者指向文档或解释为什么上述转换表示秒?

有问题的转换本质上是:

std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now();
std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start; // why does this represent seconds as opposed to some other time unit?
double secondsInDouble = elapsed_seconds.count();

有关转换示例,请参阅以下帖子。

How to get duration, as int milli's and float seconds from <chrono>?

C++ chrono - get duration as float or long long

getting chrono time in specific way

Chrono Timer Not Converting Seconds Properly

【问题讨论】:

    标签: c++ floating-point chrono seconds


    【解决方案1】:

    据此:http://en.cppreference.com/w/cpp/chrono/duration第二个模板参数的默认比例是1:1,意思是秒。

    其他值是相对于该值的比率。例如std::chrono::milliseconds 的比率是1:1000 http://en.cppreference.com/w/cpp/numeric/ratio/ratio

    所以这句话:

    std::chrono::duration<double> elapsed_seconds = end-start;
    

    相当于:

    std::chrono::duration<double, std::ratio<1>> elapsed_seconds = end-start;
    

    它被定义为秒,所有其他比率都可以从中得出。

    end - start 中定义的任何单位都转换为 std::ratio&lt;1&gt;,如 秒。

    如果你想要以毫秒为单位的时间,你可以这样做:

    std::chrono::duration<double, std::ratio<1, 1000>> elapsed_milliseconds = end-start;
    

    而end - start应该按照新的比例转换。

    【讨论】:

    • 我在参考文献的顶部看到了我错过的部分:tick period is a compile-time rational constant representing the number of seconds from one tick to the next. 因此,在默认比例为 1:1 的情况下,持续时间始终代表一秒。感谢您提请我注意。
    • std::ratio&lt;1, 1000&gt; 可以替换为std::milli。
    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    相关资源
    最近更新 更多