在實驗中經常要測試算法的效率,這時就必要要用到精確的計時方法,常用的方法如clock()等根本不起作用,因爲這些算法執行的時間實在太小了,一般都是毫秒級,甚至更低,前幾天在網上轉悠,終於找到了一種方法,如下,從MSDN Online看到的:
#include <windows.h>
LARGE_INTEGER start, end;
LARGE_INTEGER freq;
SetThreadAffinityMask(GetCurrentThread(), 1);
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
// do something
QueryPerformanceCounter(&end);
cout << (end.QuadPart - start.QuadPart)/(double)freq.QuadPart << " seconds" << endl;
上述代碼使用了一些在 kernel32.dll(它是 Microsoft Windows 的一部分)中實現的計時函數。這些函數以及它們使用的數據類型在 windows.h 中定義。簡單的說,在windows中有一個非常精細的時鐘,QueryPerformanceCounter可以得到當前時鐘運行的滴答數,而 QueryPerformanceFrequency 可以得到一個時鐘的頻率。這個例子中用start和end分別保存了起始時和結束時的時鐘滴答數,然後除以時鐘頻率,即得到起始時間與結束時間的差值,結果是以秒爲單位的運行時間。SetThreadAffinityMask用來設置當前線程的優先級,設爲高優先級可以減少干擾。這裏的LARGE_INTEGER等都是在windows.h中定義,只需聲明這一個頭文件即可。
我自己測試過,確實很精確,不過開始幾次運行還是不很穩定,多運行幾次後就可以穩定下來。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xiphiping/archive/2005/04/09/341265.aspx