2010-08-03 86 views

回答

4

據我所知,Windows上的最佳方式是使用QueryPerformanceCounterQueryPerformanceFrequency

QueryPerformanceCounter(LARGE_INTEGER*)將性能計數器的值放入傳遞的LARGE_INTEGER中。

QueryPerformanceFrequency(LARGE_INTEGER*)將性能計數器遞增的頻率放入傳遞的LARGE_INTEGER中。

然後,您可以通過記錄計數器開始執行,然後在執行完成時記錄計數器來查找執行時間。從最後減去開始以獲得計數器的更改,然後除以頻率以獲得以秒爲單位的時間。

LARGE_INTEGER start, finish, freq; 
QueryPerformanceFrequency(&freq); 
QueryPerformanceCounter(&start); 
// Do something 
QueryPerformanceCounter(&finish); 
std::cout << "Execution took " 
    << ((finish.QuadPart - start.QuadPart)/(double)freq.QuadPart) << std::endl; 
2

這是在Windows下很容易的事 - 事實上這是兩個std::clock, d相同的功能<ctime>

1

您應該使用的函數取決於您需要的計時器的分辨率。其中一些提供10ms分辨率。這些功能更易於使用。其他人需要更多的工作,但提供更高的分辨率(並且在某些環境中可能會導致一些令人頭疼的問題,儘管您的開發機器可能工作正常)。

http://www.geisswerks.com/ryan/FAQS/timing.html

該文章中提到:

  • timeGetTime
  • RDTSC(處理器功能,而不是操作系統的功能)
  • QueryPerformanceCounter的
2

您可以使用Windows API功能GetTickCount()並比較st藝術和結束。分辨率在16毫秒的球場內。如果由於某種原因,您需要更細粒度的時機,您需要查看QueryPerformanceCounter

0

C++適用於多種平臺。爲什麼不使用也適用於許多平臺的東西,例如Boost庫。

看爲Boost Timer Library

的文檔,我相信這是一個只有頭庫,這意味着它是簡單的設置和使用...