如何获得持续时间,如int毫秒和浮点秒<chrono>?

我正在尝试使用计时器库和计时器。

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

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

你如何用新的c ++ 11 <chrono>库做到这一点? 我一直在努力和谷歌search(信息稀疏)。 代码是沉重的模板,需要特殊的演员和东西,我不知道如何正确使用这个库。

这是你在找什么?

 #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 

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

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

猜测你在问什么。 我假设毫秒帧定时器,你正在寻找一些行为如下,

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

希望这可以帮助。

在使用明确types的初始化方式的 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'; }