Measure time, milliseconds or microseconds for Windows C++

c++, measure, time, windows

Solution

You can use the standard C++ `<chrono>` library:

#include <iostream>
#include <chrono>

// long operation to time
long long fib(long long n) {
  if (n < 2) {
    return n;
  } else {
    return fib(n-1) + fib(n-2);
  }
}

int main() {
  auto start_time = std::chrono::high_resolution_clock::now();

  long long input = 32;
  long long result = fib(input);

  auto end_time = std::chrono::high_resolution_clock::now();
  auto time = end_time - start_time;

  std::cout << "result = " << result << '\n';
  std::cout << "fib(" << input << ") took " <<
    time/std::chrono::milliseconds(1) << "ms to run.\n";
}

One thing to keep in mind is that using `<chrono>` enables type safe, generic timing code but to get that benefit you have use it a bit differently than you would use dumb, type-unsafe timing libraries that store durations and time points in types like `int`. Here's an answer that explains some specific usage scenarios and the differences between using untyped libraries and best practices for using chrono: https://stackoverflow.com/a/15839862/365496

The maintainer of Visual Studio's standard library implementation has indicated that the low resolution of `high_resolution_clock` has been fixed in VS2015 via the use of `QueryPerformanceCounter()`.

Problem

How do you measure the execution time in milliseconds or microseconds in Windows C++? I found many method one calling time(NULL), but it measures time in seconds only and the seconds clock() (clock_t) measure CPU time, not the actual time. I found the function gettimeofday(Calendar time) mentioned in this paper: dropbox.com/s/k0zv8pck7ydbakz/1_7-PDF_thesis_2.pdf This function is for Linux (compute time in milli and microseconds) and not Windows. I found an alternative to it for Windows: dropbox.com/s/ofo99b166l7e2gf/gettimeofday.txt And this may be relevant: stackoverflow.com/questions/1861294/how-to-calculate-execution-time-of-a-code-snippet-in-c

Original source

Related problems