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

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

我发现许多方法之一调用时间(空),但它只测量时间秒,而秒钟()(clock_t)测量CPU时间,而不是实际时间。

我发现本文提到的函数gettimeofday(Calendar time):dropbox.com/s/k0zv8pck7ydbakz/1_7-PDF_thesis_2.pdf

这个函数是针对Linux的(计算时间以毫秒和微秒为单位)而不是Windows。

我find了一个替代它的Windows:dropbox.com/s/ofo99b166l7e2gf/gettimeofday.txt

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

Solutions Collecting From Web of "测量Windows C ++的时间,毫秒或微秒"

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

 #include <iostream> #include <chrono> // long operation to time int fib(int 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(); fib(12); auto end_time = std::chrono::high_resolution_clock::now(); auto time = end_time - start_time; std::cout << "fib(100) took " << std::chrono::duration_cast<std::chrono::microseconds>(time).count() << " to run.\n"; } 

需要注意的一点是使用<chrono>可以实现类型安全的通用计时代码,但是为了获得这样的好处,您可以使用与使用类型不安全的类型不安全的时间库相比有所不同的方法,这些类型存储持续时间和时间点类型像int 。 下面的答案解释了一些特定的使用场景以及使用无类型库和使用chrono的最佳实践之间的区别: https : //stackoverflow.com/a/15839862/365496


Visual Studio标准库实现的维护人员已经指出 ,通过使用QueryPerformanceCounter() ,VS2015中high_resolution_clock的低分辨率已经得到了修复。

您正在查找QueryPerformanceCounter和相关的功能。

您需要使用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