在浮点模式下获取计时秒针

Get chrono seconds in float

本文关键字:获取 模式      更新时间:2023-10-16

在示例中,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();

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

如何从获取持续时间,如整数毫米和浮点秒?

C++ Chrono - 将持续时间设置为浮动或长

以特定方式获取计时时间

计时计时器无法正确转换秒数

根据这个: 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<1>,以为单位。

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

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

end - start应根据新比率进行转换。