web-dev-qa-db-fra.com

Chrono - La différence entre deux instants en millisecondes?

Comment puis-je obtenir (à l'aide de la bibliothèque std :: chrono) la différence entre deux instants dans le temps en millisecondes?

Je pourrais le faire en utilisant ceci:

std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();

std::chrono::time_point<std::chrono::system_clock> foo = now + std::chrono::milliseconds(100);

std::chrono::duration<float> difference = foo - now;

const int milliseconds = difference.count() * 1000;

Comment puis-je obtenir ce temps en millisecondes, afin que je puisse utiliser la durée comme un unsigned int, et pas un float, puis multiplier par 1000?

13
waas1919

std::chrono::duration a deux paramètres de modèle, le second étant exactement l’unité de mesure. Vous pouvez appeler std::chrono::duration_cast pour convertir un type de durée en un autre. En outre, il existe un type de durée prédéfini pour les millisecondes: std::chrono::milliseconds . Composer cela ensemble:

auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(foo - now);

Pour obtenir le nombre réel de millisecondes, utilisez duration::count :

auto ms = milliseconds.count();

Son type de retour est duration::rep, qui pour les types de durée standard tels que std::chrono::milliseconds est un entier signé de taille non spécifiée.

21
lisyarus
chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count()
5
zoska

J'ai eu des problèmes avec la durée d'impression avec des lettres comme e-09. Voici comment je l'ai corrigé:

auto start = std::chrono::high_resolution_clock::now();
< run your function or code here >
auto finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed = finish - start;
std::cout << "Elapsed Time: " << elapsed.count() << " seconds" << std::endl;

Et maintenant je reçois les résultats souhaités:

Elapsed Time: 34.406 seconds
0
AceFunk

http://www.cplusplus.com/reference/chrono/duration_cast/

std::chrono::duration_cast<std::chrono::milliseconds>();
0
johnjohnlys