#include<windows.h>
DWORD dwStart = GetTickCount();
// 測試代碼
DWORD dwTime = GetTickCount() - dwStart;
注意:GetTickCount()精確度有限,跟CPU有關,一般精確度在16ms左右,最精確也不會精確過10ms,這就是說如果你的時間間隔在16ms以內的話,兩個時間相減爲0,如果大於16ms且小於32ms的話,兩個時間相減爲16ms(也不完全嚴格,有的時候會是15或者17,根據當時CPU的處理情況而定)。其實也就是說你得到的這個差是實際時間間隔除以16(具體是幾取決於你機器的處理能力,但是不會小於10),把餘數捨棄。
#include<time.h>
unsigned long start,stop;
start=time(NULL); //取值爲秒
//你的程序
stop=time(NULL);
printf("運行時間:%ld",stop-start);
三,精確計時法
QueryPerformanceCounter()這個函數返回高精確度性能計數器的值,它可以以微妙爲單位
計時.但是 QueryPerformanceCounter()確切的精確計時的最小單位是與系統有關的,所以,必
須 要 查 詢 系 統 以 得 到 QueryPerformanceCounter() 返 回 的 嘀 噠 聲 的 頻
率.QueryPerformanceFrequency()提供了這個頻率值,返回每秒嘀噠聲的個數.計算確切的時
間是從第一次調用 QueryPerformanceCounter()開始的
使用 window 操作系統本身提供的 API 接口,程序如下:
#include<windows.h>
LARGE_INTEGER Freq; LARGE_INTEGER start; LARGE_INTEGER end;
QueryPerformanceFrequency(&Freq); // 獲取時鐘週期
QueryPerformanceCounter(&start); // 獲取時鐘計數
你的程序
QueryPerformanceCounter(&end);
/*此處*1000,以毫秒爲單位;*1000000 以微秒爲單位*/
/*由於執行時間極短(可能是幾微秒),所以採用微秒爲單位*/
printf("%d",(end.QuadPart-start.QuadPart)*1000000/Freq.QuadPart);
注意:1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(納秒)=10^12ps(皮秒)=10^15fs(飛秒)=10^18as(阿秒)=10^21zm(仄秒)=10^24ym(幺秒)
#include <stdio.h>
#include<windows.h>
int main()
{
LARGE_INTEGER Freq; //64位有符號整數值.
LARGE_INTEGER start;
LARGE_INTEGER end;
QueryPerformanceFrequency(&Freq); // 獲取時鐘週期 “1次/秒”,記做Hz(赫茲)。1Hz就是每秒一次
QueryPerformanceCounter(&start); // 獲取時鐘計數
Sleep(1000);//毫秒爲單位
QueryPerformanceCounter(&end);
/*此處*1000,以毫秒爲單位;*1000000 以微秒爲單位*/
/*由於執行時間極短(可能是幾微秒),所以採用微秒爲單位*/
/* 1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(納秒) */
printf("%d",(end.QuadPart-start.QuadPart)*1000/Freq.QuadPart);
return 0;
}
四,如果是在linux平臺下面呢?
時間的測量有多種方式。一種是C語言庫函數 time(),它可以提供秒級的計時,比較粗糙。
一種是C語言庫函數gettimeofday(),大約可以精確到微妙,但會受到CPU調度的影響。
一種是時間戳計時器(Time Stamp Counter),可以達到納秒級計時精度。
1)time 命令 — 執行命令並計時
time find . -name "*.c" |xargs wc -l // 統計執行命令時間
real
0m33.748s
user 0m0.772s
sys 0m1.044s
(1)實際時間(real time): 從command命令行開始執行到運行終止的消逝時間;
(2)用戶CPU時間(user CPU time): 命令執行完成花費的用戶CPU時間,即命令在用戶態中執行時間總和;
(3)系統CPU時間(system CPU time): 命令執行完成花費的系統CPU時間,即命令在覈心態中執行時間總和。
其中,用戶CPU時間和系統CPU時間之和爲CPU時間,即命令佔用CPU執行的時間總和。實際時間要大於CPU時間,因爲Linux是多任務操作系統,往往在執行一條命令時,系統還要處理其它任務。
另一個需要注意的問題是即使每次執行相同命令,但所花費的時間也是不一樣,其花費時間是與系統運行相關的。
2)微秒級測量方法
struct timeval
{
long tv_sec; //秒域
long tv_usec; //微妙域
}
(tvend.tv_sec-tvstart.tv_sec)+(tvend.tv_usec-tvstart.tv_usec)/1000000 = 以秒爲單位的計時時間。
以下得到以微秒爲計時單位的時間
#include <sys/time.h>
#include "stdio.h"
int main()
{
struct timeval tstart,tend;
gettimeofday(&tstart,NULL);
for(int i=0;i<10000;++i)
printf("");
gettimeofday(&tend,NULL);
long int use_useconds=1000000*(tend.tv_sec - tstart.tv_sec) + (tend.tv_usec - tstart.tv_usec);
printf("%ld\n",use_useconds);
return 0;
}