2009-02-11 7 views
45

Sous Windows, il existe des fonctions pratiques telles que QueryPerformanceCounter de mmsystem.h pour créer un temporisateur haute résolution. Y at-il quelque chose de similaire pour Linux?Minuteur haute résolution avec C++ et Linux?

+0

http://stackoverflow.com/a/5524138/183120 (multi-plateforme C++ 11 minuterie haute résolution standard) – legends2k

Répondre

31

Cela a été asked before here - mais, fondamentalement, il existe une fonction boost ptime que vous pouvez utiliser, ou une fonction POSIX clock_gettime() qui peut servir essentiellement le même but.

+0

n » Je sais que Boost fournit une fonctionnalité de minuterie. Merci :) – okoman

+1

Ou utilisez le [HighResTimer] (http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/classACE__High__Res__Timer.html) de [ACE] (http: //www.cs.wustl. edu/~ schmidt/ACE.html) bibliothèque. – lothar

+3

@lothar: +1 pour le pointeur vers la librairie ACE, merci. Le lien que vous avez donné était périmé, voici un nouveau: http://www.dre.vanderbilt.edu/Doxygen/Stable/libace-doc/a00227.html –

29

Pour Linux (et BSD), vous voulez utiliser clock_gettime().

#include <sys/time.h> 

int main() 
{ 
    timespec ts; 
    // clock_gettime(CLOCK_MONOTONIC, &ts); // Works on FreeBSD 
    clock_gettime(CLOCK_REALTIME, &ts); // Works on Linux 
} 

Voir: This answer pour plus d'informations

+6

clock_gettime (CLOCK_MONOTONIC, &ts); fonctionne également sous Linux.) – Maister

+7

, vous devez être conscient de la différence entre 'CLOCK_MONOTONIC' et' CLOCK_REALTIME' - le premier a son point zéro fixé à quelque chose d'arbitraire au démarrage du système, et en tant que tel n'est utile que pour les comparaisons relatives entre deux mesures 'CLOCK_MONOTONIC' (mais n'est pas affecté par les ajustements d'horloge) – bdonlan

1

Pour mon argent, il n'y a pas plus facile à utiliser minuterie multi-plateforme que la classe de Qt QTime.

2

Avec C++ 11, utilisez std::chrono::high_resolution_clock.

Exemple:

#include <iostream> 
#include <chrono> 
typedef std::chrono::high_resolution_clock Clock; 

int main() 
{ 
    auto t1 = Clock::now(); 
    auto t2 = Clock::now(); 
    std::cout << "Delta t2-t1: " 
       << std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count() 
       << " nanoseconds" << std::endl; 
} 

sortie:

Delta t2-t1: 131 nanoseconds 
Questions connexes