web-dev-qa-db-fra.com

Comment obtenir l'heure actuelle en millisecondes?

Je suis nouveau sur C++ et je ne connais pas grand-chose à sa bibliothèque. J'ai besoin d'analyser le temps de différents algorithmes de tri, pour lesquels j'ai besoin d'obtenir l'heure actuelle en millisecondes. Y'a-t'il un quelconque moyen d'y arriver?

8
Yasir Mustafa

Utilisez simplement std :: chrono . L'exemple général ci-dessous décrit la tâche "d'imprimer 1000 étoiles":

#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>

int main ()
{
  using namespace std::chrono;

  high_resolution_clock::time_point t1 = high_resolution_clock::now();

  std::cout << "printing out 1000 stars...\n";
  for (int i=0; i<1000; ++i) std::cout << "*";
  std::cout << std::endl;

  high_resolution_clock::time_point t2 = high_resolution_clock::now();

  duration<double, std::milli> time_span = t2 - t1;

  std::cout << "It took me " << time_span.count() << " milliseconds.";
  std::cout << std::endl;

  return 0;
}

Au lieu d'imprimer les étoiles, vous y placerez votre algorithme de tri et le mesurerez dans le temps.


N'oubliez pas d'activer les drapeaux d'optimisation pour votre compilateur, si vous avez l'intention de faire des analyses comparatives, par exemple pour g ++ , vous avez besoin de -O3. C'est sérieux, vérifiez ce qui m'est arrivé quand je ne l'ai pas fait: Pourquoi emplace_back est plus rapide que Push_back?


Ps: Si votre compilateur ne prend pas en charge c ++ 11 , alors vous pouvez rechercher d'autres méthodes dans mon Time Measurements (C++) .


Un exemple spécifique (jouet), en utilisant mon Quicksort (C++) , serait:

#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>

void quickSort(int a[], int first, int last);
int pivot(int a[], int first, int last);
void swap(int& a, int& b);
void swapNoTemp(int& a, int& b);

using namespace std;
using namespace std::chrono;

int main()
{
    int test[] = { 7, -13, 1, 3, 10, 5, 2, 4 };
    int N = sizeof(test)/sizeof(int);

    cout << "Size of test array :"  << N << endl;

    high_resolution_clock::time_point t1 = high_resolution_clock::now();

    // I want to measure quicksort
    quickSort(test, 0, N-1);

    high_resolution_clock::time_point t2 = high_resolution_clock::now();

    duration<double> time_span = t2 - t1;

    std::cout << "It took me " << time_span.count() << " seconds.";
    std::cout << std::endl;

    return 0;
}

et la sortie est maintenant:

Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall -std=c++11 -O3 main.cpp 
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out 
Size of test array :8
It took me 3.58e-07 seconds.

C'est aussi simple que ça. Bonne analyse comparative! =)


ÉDITER:

high_resolution_clock::now() fonction renvoie l'heure par rapport à quelle heure?

De std :: chrono :

Points de temps

Une référence à un moment précis, comme son anniversaire, l'aube d'aujourd'hui ou le passage du prochain train. Dans cette bibliothèque, les objets du modèle de classe time_point expriment cela en utilisant une durée relative à un Epoch (qui est un point fixe dans le temps commun à tous les objets time_point utilisant la même horloge).

où l'on pourrait vérifier cela exemple Epoch et time_point , qui génère:

time_point tp is: Thu Jan 01 01:00:01 1970
20
gsamaras