我正在尝试使用chrono库作为计时器和持续时间。
我希望能够有一个Duration frameStart;(从应用程序开始)和一个Duration frameDelta;(帧之间的时间)
我需要能够获得frameDelta持续时间(以毫秒为单位)和浮点秒。
如何使用新的c ++ 11<chrono>库执行此操作?我一直在努力并进行谷歌搜索(信息稀疏)。该代码是大量模板化的,需要特殊的强制类型转换和其他操作,我无法弄清楚如何正确使用此库。
我正在尝试使用chrono库作为计时器和持续时间。
我希望能够有一个Duration frameStart;(从应用程序开始)和一个Duration frameDelta;(帧之间的时间)
我需要能够获得frameDelta持续时间(以毫秒为单位)和浮点秒。
如何使用新的c ++ 11<chrono>库执行此操作?我一直在努力并进行谷歌搜索(信息稀疏)。该代码是大量模板化的,需要特殊的强制类型转换和其他操作,我无法弄清楚如何正确使用此库。
duration_cast
                Answers:
这是您要找的东西吗?
#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() << "s\n";
    std::cout << d.count() << "ms\n";
}
对我来说打印出来:
6.5e-08s
0ms
autoonfs和d?
                    auto会很好d,因为的结果duration_cast<ms>是ms。但是,forfs auto并不适合,因为的结果的t1-t0类型high_resolution_clock::duration不一定与相同duration<float>。例如在我的系统上是duration<long long, nano>。因此,在该行上发生了从基于整数到基于nanoseconds浮点数的隐式转换seconds,仅是因为目标类型是通过指定的fsec。
                    auto fs = std::chrono::duration_cast<fsec>(t1 - t0);被过度矫正?
                    猜测您要的是什么。我假设以毫秒为单位的帧计时器正在寻找类似以下内容的内容,
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();
}
希望这可以帮助。
我不知道“毫秒和浮动秒”是什么意思,但这应该可以给您一个想法:
#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';
}
count作为float?
                    #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';
}
count它...