Timer ad alta risoluzione con C ++ e Linux?

Sotto Windows ci sono alcune pratiche funzioni come QueryPerformanceCounter da mmsystem.h per creare un timer ad alta risoluzione. C’è qualcosa di simile per Linux?

È stato chiesto prima qui – ma fondamentalmente, c’è una funzione boost ptime che è ansible utilizzare, oppure una funzione clock_gettime () POSIX che può servire sostanzialmente allo stesso scopo.

Per Linux (e BSD) si desidera utilizzare clock_gettime () .

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

Vedi: questa risposta per ulteriori informazioni

Ecco un link che descrive come eseguire il timing ad alta risoluzione su Linux e Windows … e no, non utilizzare RTSC.

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

Con C ++ 11, usa std::chrono::high_resolution_clock .

Esempio:

 #include  #include  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(t2 - t1).count() < < " nanoseconds" << std::endl; } 

Produzione:

 Delta t2-t1: 131 nanoseconds 

Non ho nient’altro che questo link: http://www.mjmwired.net/kernel/Documentation/rtc.txt

Sono abbastanza sicuro che RTC sia quello che stai cercando.

MODIFICARE

Altre risposte sembrano più portatili delle mie.

Per i miei soldi, non esiste un timer multipiattaforma più facile da usare della class QT di QTime .