测量Windows C ++的时间,毫秒或微秒

时间:2014-05-12 18:01:46

标签: c++ windows time measure

如何在Windows C ++中以毫秒或微秒为单位测量执行时间?

我发现很多方法一个调用时间(NULL),但它仅以秒为单位测量时间,秒钟()(clock_t)测量CPU时间,而不是实际时间。

我发现本文中提到的函数gettimeofday(日历时间): dropbox.com/s/k0zv8pck7ydbakz/1_7-PDF_thesis_2.pdf

此功能适用于Linux(计算时间,单位为毫秒和微秒),而非Windows。

我找到了Windows的替代品: dropbox.com/s/ofo99b166l7e2gf/gettimeofday.txt

这可能是相关的:stackoverflow.com/questions/1861294/how-to-calculate-execution-time-of-a-code-snippet-in-c

3 个答案:

答案 0 :(得分:24)

您可以使用标准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";
}

要记住的一件事是使用<chrono>启用类型安全的通用计时代码但是为了获得这个好处,你使用它有点不同于使用存储持续时间的哑,类型不安全的计时库和int等类型的时间点。这里有一个答案,解释了一些特定的使用场景以及使用无类型库和使用计时器的最佳实践之间的区别:https://stackoverflow.com/a/15839862/365496


Visual Studio的标准库实现has indicated的维护者,high_resolution_clock的低分辨率已通过使用QueryPerformanceCounter()在VS2015中得到修复。

答案 1 :(得分:2)

您正在寻找QueryPerformanceCounter及相关功能。

答案 2 :(得分:2)

您需要使用QPC / QPF API来计算执行时间。在调用QueryPerformanceCounter之间调用您想要的代码,然后使用QueryPerformanceFrequency将其从周期转换为微秒。

LARGE_INTEGER nStartTime;
LARGE_INTEGER nStopTime;
LARGE_INTEGER nElapsed;
LARGE_INTEGER nFrequency;

::QueryPerformanceFrequency(&nFrequency); 
::QueryPerformanceCounter(&nStartTime);

    SomethingToBeTimed();

::QueryPerformanceCounter(&nStopTime);
nElapsed.QuadPart = (nStopTime.QuadPart - nStartTime.QuadPart) * 1000000;
nElapsed.QuadPart /= nFrequency.QuadPart;

参考文献: http://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx