c++ - example - ¿Cómo obtener la duración, como int milli y segundos flotantes desde<chrono>?
date c++ (4)
Adivinando qué es lo que estás pidiendo. Asumo que con el temporizador de cuadro de milisegundos estás buscando algo que actúe como el siguiente,
double mticks()
{
struct timeval tv;
gettimeofday(&tv, 0);
return (double) tv.tv_usec / 1000 + tv.tv_sec * 1000;
}
pero usa std::chrono
lugar,
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();
}
Espero que esto ayude.
Estoy tratando de usar la biblioteca de cronógrafos para los tiempos y duraciones.
Quiero poder tener un Duration frameStart;
(desde el inicio de la aplicación) y una Duration frameDelta;
(tiempo entre cuadros)
Necesito poder obtener la duración de frameDelta
en milisegundos y segundos flotantes.
¿Cómo se hace esto con las nuevas bibliotecas c ++ 11 <chrono>
? He estado trabajando en ello y buscando en Google (la información es escasa). El código tiene muchas plantillas y requiere moldes especiales y cosas, no puedo entender cómo usar esta biblioteca correctamente.
En estilo AAA utilizando el modismo de inicializador tipeado explícitamente :
#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'';
}
Es esto lo que estás buscando?
#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";
}
que para mí se imprime:
6.5e-08s
0ms
No sé lo que significa "milisegundos y segundos flotantes", pero esto debería darte una idea:
#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'';
}