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?
Répondre
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.
n » Je sais que Boost fournit une fonctionnalité de minuterie. Merci :) – okoman
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
@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 –
Je n'ai que ce lien: http://www.mjmwired.net/kernel/Documentation/rtc.txt
Je suis assez sûr RTC est ce que vous cherchez bien.
EDIT
D'autres réponses semblent plus portable que le mien.
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
clock_gettime (CLOCK_MONOTONIC, &ts); fonctionne également sous Linux.) – Maister
, 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
Voici un lien qui décrit comment faire le calendrier haute résolution sur Linux et Windows ... et non, NE PAS utiliser RTSC.
http://tdistler.com/2010/06/27/high-performance-timing-on-linux-windows
Pour mon argent, il n'y a pas plus facile à utiliser minuterie multi-plateforme que la classe de Qt QTime.
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
http://stackoverflow.com/a/5524138/183120 (multi-plateforme C++ 11 minuterie haute résolution standard) – legends2k