如何从 < chrono > 获得持续时间,如 int milli 和 float 秒?

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

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

我需要能够得到的 frameDelta持续时间为毫秒和浮动秒。

如何使用新的 c + + 11 <chrono>库做到这一点?我一直在研究它,并在谷歌上搜索(信息很少)。这段代码有很多模板,需要特殊的强制类型转换等等,我不知道如何正确地使用这个库。

196320 次浏览

我不知道“毫秒和浮动秒”是什么意思,但这应该会给你一个想法:

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

这就是你要找的吗?

#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

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

猜猜你想要什么。我假设通过毫秒帧定时器你在寻找一些像下面这样的东西,

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

but uses std::chrono instead,

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();
}

希望这个能帮上忙。

float GetTimeFloat() {
return std::chrono::duration_cast<std::chrono::duration<float, std::milli>>(std::chrono::high_resolution_clock::now().time_since_epoch()).count() / 1000;
}