Under Windows there are some handy functions like QueryPerformanceCounter from mmsystem.h to create a high resolution timer. 
Is there something similar for Linux?
            Asked
            
        
        
            Active
            
        
            Viewed 8.3k times
        
    46
            
            
         
    
    
        okoman
        
- 5,529
- 11
- 41
- 45
- 
                    http://stackoverflow.com/a/5524138/183120 (Cross-platform C++11 standard high resolution timer) – legends2k May 15 '13 at 14:17
6 Answers
31
            It's been asked before here -- but basically, there is a boost ptime function you can use, or a POSIX clock_gettime() function which can serve basically the same purpose.
 
    
    
        Community
        
- 1
- 1
 
    
    
        Nik Reiman
        
- 39,067
- 29
- 104
- 160
- 
                    
- 
                    1Or use the [HighResTimer](http://www.dre.vanderbilt.edu/Doxygen/Stable/ace/classACE__High__Res__Timer.html) from the [ACE](http://www.cs.wustl.edu/~schmidt/ACE.html) library. – lothar Apr 12 '09 at 02:00
- 
                    3@lothar: +1 for pointer to ACE library, thanks. The link you gave was stale, here's a new one: http://www.dre.vanderbilt.edu/Doxygen/Stable/libace-doc/a00227.html – BD at Rivenhill May 16 '11 at 16:02
30
            
            
        For Linux (and BSD) you want to use 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
}
See: This answer for more information
- 
                    8Of course, you need to be aware of the difference between `CLOCK_MONOTONIC` and `CLOCK_REALTIME` - the former has its zero-point set to something arbitrary at system boot, and as such is only useful for relative comparisons between two `CLOCK_MONOTONIC` measurements (but is unaffected by wallclock adjustments) – bdonlan Jan 21 '11 at 17:57
8
            
            
        Here's a link describing how to do high-resolution timing on Linux and Windows... and no, Don't use RTSC.
 
    
    
        Somesh Kumar
        
- 8,088
- 4
- 33
- 49
 
    
    
        tjd
        
- 467
- 1
- 8
- 14
5
            
            
        With C++11, use std::chrono::high_resolution_clock.
Example:
#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;
}
Output:
Delta t2-t1: 131 nanoseconds
 
    
    
        Martin G
        
- 17,357
- 9
- 82
- 98
1
            
            
        I have nothing but this link: http://www.mjmwired.net/kernel/Documentation/rtc.txt
I'm pretty sure RTC is what you are looking for though.
EDIT
Other answers seem more portable than mine.
 
    
    
        Oliver N.
        
- 2,496
- 19
- 20
1
            
            
        For my money, there is no easier-to-use cross-platform timer than Qt's QTime class.
 
    
    
        Alan Turing
        
- 12,223
- 16
- 74
- 116
