测量 Windows C 的时间、毫秒或微秒

新手上路,请多包涵

您如何在 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

原文由 user3617694 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您可以使用标准 C++ <chrono>

 #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 这样的类型的时间点。这是一个答案,解释了一些特定的使用场景以及使用无类型库和使用 chrono 的最佳实践之间的区别: https ://stackoverflow.com/a/15839862/365496


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

原文由 bames53 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题