#include <ctime> //計時用的頭文件
#include <iostream>
using namespace std;
int main() {
time_t start,end,time; /*注意計時所用的變量名稱*/
/*程序開始執行,開始計時*/
start=clock(); //獲得開始的時間,單位爲毫秒
/*程序執行過程……*/
for(int i=0;i<=100;i++) cout << i << ' ';
cout << endl;
/*程序結束執行,結束計時*/
end=clock(); //獲得結束時間
time=end-start;//這裏的時間是計算機內部時間
cout<<"endTime - beginTime = Time"<<endl;
cout << end <<" - "<<start<<" = "<<time<< endl;
system("pause");
return 0;
}
需要取得系統精確時鐘函數:
1)對於一般的實時控制,使用GetTickCount()函數就可以滿足精度要求,但要進一步提高計時精度,就要採用 QueryPerformanceFrequency()函數和QueryPerformanceCounter()函數。 2)這兩個函數是VC提供的僅供 Windows 9X使用的高精度時間函數,並要求計算機從硬件上支持高精度計時器。 3) QueryPerformanceFrequency()函數和 QueryPerformanceCounter()函數的原型爲: BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount); 數據類型LARGE—INTEGER既可以是一個作爲8字節長的整型數,也可以是作爲兩個4字節長的整型數的聯合結構,其具體用法根據編譯器是否支持64位而定。該類型的定義如下: typedef union _LARGE_INTEGER { struct { DWORD LowPart; // 4字節整型數 LONG HighPart; // 4字節整型數 }; LONGLONG QuadPart; // 8字節整型數 } LARGE_INTEGER; 4)在進行計時之前,應該先調用QueryPerformanceFrequency()函數獲得機器內部計時器的時鐘頻率。筆者在三種PentiumⅡ機器上使用該函數,得到的時鐘頻率都是1193180Hz。接着,筆者在需要嚴格計時的事件發生之前和發生之後分別調用QueryPerformanceCounter()函數,利用兩次獲得的計數之差和時鐘頻率,就可以計算出事件經歷的精確時間。 以下程序是用來測試函數Sleep(100)的精確持續時間。 LARGE—INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); // 獲得計數器的時鐘頻率 dfFreq = (double)litmp.QuadPart; QueryPerformanceCounter(&litmp); // 獲得初始值 QPart1 = litmp.QuadPart; Sleep(100) ; QueryPerformanceCounter(&litmp); // 獲得終止值 QPart2 = litmp.QuadPart; dfMinus = (double)(QPart2 - QPart1); dfTim = dfMinus / dfFreq; // 獲得對應的時間值 執行上面程序,得到的結果爲dfTim=0.097143767076216(秒)。細心的讀者會發現,每次執行的結果都不一樣,存在一定的差別,這是由於Sleep()自身的誤差所致