如何从中获取持续时间,如整数毫秒和浮点秒<chrono>数?

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

本文关键字:lt chrono gt 持续时间 整数 获取      更新时间:2023-10-16

我正在尝试使用计时器和持续时间的chrono库。

我想能够有一个Duration frameStart;(从应用程序开始)和Duration frameDelta;(帧间时间)

我需要能够获得frameDelta持续时间为毫秒和浮点秒。

如何在新的c++11 <chrono>库中做到这一点?我一直在研究它,并在谷歌上搜索(信息很少)。代码是大量模板化的,需要特殊的类型转换和东西,我不知道如何正确使用这个库。

这是你要找的吗?

#include <chrono>
#include <iostream>
int main()
{
    typedef std::chrono::high_resolution_clock Time;
    typedef std::chrono::milliseconds ms;
    typedef std::chrono::duration<float> fsec;
    auto t0 = Time::now();
    auto t1 = Time::now();
    fsec fs = t1 - t0;
    ms d = std::chrono::duration_cast<ms>(fs);
    std::cout << fs.count() << "sn";
    std::cout << d.count() << "msn";
}

输出:

6.5e-08s
0ms

猜一猜你要的是什么。我假设毫秒帧计时器你正在寻找像下面这样的东西,

double mticks()
{
    struct timeval tv;
    gettimeofday(&tv, 0);
    return (double) tv.tv_usec / 1000 + tv.tv_sec * 1000;
}

但使用std::chrono代替,

double mticks()
{
    typedef std::chrono::high_resolution_clock clock;
    typedef std::chrono::duration<float, std::milli> duration;
    static clock::time_point start = clock::now();
    duration elapsed = clock::now() - start;
    return elapsed.count();
}

我不知道"milliseconds and float seconds"是什么意思,但这应该给你一个概念:

#include <chrono>
#include <thread>
#include <iostream>
int main()
{
  auto then = std::chrono::system_clock::now();
  std::this_thread::sleep_for(std::chrono::seconds(1));
  auto now = std::chrono::system_clock::now();
  auto dur = now - then;
  typedef std::chrono::duration<float> float_seconds;
  auto secs = std::chrono::duration_cast<float_seconds>(dur);
  std::cout << secs.count() << 'n';
}

使用显式类型初始化器的AAA风格:

#include <chrono>
#include <iostream>
int main(){
  auto start = std::chrono::high_resolution_clock::now();
  // Code to time here...
  auto end = std::chrono::high_resolution_clock::now();
  auto dur = end - start;
  auto i_millis = std::chrono::duration_cast<std::chrono::milliseconds>(dur);
  auto f_secs = std::chrono::duration_cast<std::chrono::duration<float>>(dur);
  std::cout << i_millis.count() << 'n';
  std::cout << f_secs.count() << 'n';
}
float GetTimeFloat() {
    return std::chrono::duration_cast<std::chrono::duration<float, std::milli>>(std::chrono::high_resolution_clock::now().time_since_epoch()).count() / 1000;
}