我正在尝试将计时器库用于计时器和持续时间。
我希望能够拥有Duration frameStart;
(从应用开始)
和Duration frameDelta;
(帧之间的时间)
我需要能够将frameDelta
持续时间设为毫秒和浮点秒。
如何使用新的c ++ 11 <chrono>
库执行此操作?我一直在努力和谷歌搜索(信息稀疏)。代码很模糊,需要特殊的演员和事物,我无法弄清楚如何正确使用这个库。
答案 0 :(得分:120)
这是你要找的吗?
#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
答案 1 :(得分:14)
我不知道“毫秒和浮动秒数”是什么意思,但这应该会给你一个想法:
#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';
}
答案 2 :(得分:11)
猜测你要求的是什么。我假设毫秒帧计时器你正在寻找像下面那样的东西,
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();
}
希望这有帮助。
答案 3 :(得分:6)
使用AAA style:{/ 3>在explicitly typed initializer idiom中
#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';
}