提问者:小点点

如何从<chrono>中获取持续时间,如int milli's和float seconds?


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

我希望能够有一个(从应用程序开始)和一个(帧之间的时间)

我需要能够以毫秒和浮点秒的形式获取持续时间。

如何使用新的C++11/code>库来实现这一点?我一直在研究它,并在谷歌上搜索(信息很少)。代码是大量模板化的,需要特殊的强制转换和其他东西,我不知道如何正确地使用这个库。


共3个答案

匿名用户

这就是你要找的吗?

#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

匿名用户

猜猜你要的是什么。我假设通过毫秒的帧定时器,您正在寻找类似于以下行为的东西,

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

而是使用

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';
}