web-dev-qa-db-fra.com

Minuterie haute résolution avec C ++ et Linux?

Sous Windows, il existe des fonctions pratiques comme QueryPerformanceCounter de mmsystem.h pour créer une minuterie haute résolution. Existe-t-il quelque chose de similaire pour Linux?

46
okoman

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

32
Nik Reiman

Pour Linux (et BSD), vous souhaitez 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: Cette réponse pour plus d'informations

30
grieve

Voici un lien décrivant comment effectuer un chronométrage haute résolution sous Linux et Windows ... et non, n'utilisez pas RTSC.

https://web.archive.org/web/20160330004242/http://tdistler.com/2010/06/27/high-performance-timing-on-linux-windows

8
tjd

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
3
Martin G

Je n'ai que ce lien: http://www.mjmwired.net/kernel/Documentation/rtc.txt

Je suis sûr que RTC est ce que vous recherchez cependant.

[~ # ~] modifier [~ # ~]

D'autres réponses semblent plus portables que les miennes.

1
Oliver N.

Pour mon argent, il n'y a pas de temporisateur multiplateforme plus facile à utiliser que la classe QTime de Qt.

1
Alan Turing