47

Under Windows there are some handy functions like QueryPerformanceCounter from mmsystem.h to create a high resolution timer. Is there something similar for Linux?

1

6 Answers 6

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.

Sign up to request clarification or add additional context in comments.

3 Comments

Didn't know that Boost provides timer functionality. Thank you :)
Or use the HighResTimer from the ACE library.
@lothar: +1 for pointer to ACE library, thanks. The link you gave was stale, here's a new one: dre.vanderbilt.edu/Doxygen/Stable/libace-doc/a00227.html
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

1 Comment

Of 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)
8

Here's a link describing how to do high-resolution timing on Linux and Windows... and no, Don't use RTSC.

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

Comments

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

Comments

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.

Comments

1

For my money, there is no easier-to-use cross-platform timer than Qt's QTime class.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.