C/C++中的計時函數是clock()。
創(chuàng)新互聯(lián)公司服務項目包括萊西網站建設、萊西網站制作、萊西網頁制作以及萊西網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,萊西網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到萊西省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
所以,可以用clock函數來計算的運行一個循環(huán)、程序或者處理其它事件到底花了多少時間,具體參考代碼如下:
#include?“stdio.h”
#include?“stdlib.h”
#include?“time.h”
int?main(?void?)
{
long????i?=?10000000L;
clock_t?start,?finish;
double??duration;
/*?測量一個事件持續(xù)的時間*/
printf(?"Time?to?do?%ld?empty?loops?is?",?i?);
start?=?clock();
while(?i--?)??????;
finish?=?clock();
duration?=?(double)(finish?-?start)?/?CLOCKS_PER_SEC;
printf(?"%f?seconds\n",?duration?);
system("pause");
}
BOOL?QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);可以返回硬件支持的高精度計數器的頻率。先調用QueryPerformanceFrequency()函數獲得機器內部計時器的時鐘頻率。接著在需要嚴格計時的事件發(fā)生前和發(fā)生之后分別調用QueryPerformanceCounter(),利用兩次獲得的計數之差和時鐘頻率,就可以計算出事件經歷的精確時間。
#include?"stdafx.h"
#include?windows.h
#include?time.h
#include??"process.h"
#define?random(x)?(rand()%x)
int?_tmain(int?argc,?_TCHAR*?argv[])
{
LARGE_INTEGER?fre?=?{?0?};??//儲存本機CPU時鐘頻率
LARGE_INTEGER?startCount?=?{?0?};
LARGE_INTEGER?endCount?=?{?0?};
QueryPerformanceFrequency(fre);//獲取本機cpu頻率
//開始計時
QueryPerformanceCounter(startCount);
//運算
for?(int?i?=?0;?i??10000000;?i++)
{
float?fTem1?=?random(100)*random(1000)*random(10000)*random(100000);
}
//結束計時
QueryPerformanceCounter(endCount);
//計算時間差
double?dTimeTake?=?((double)endCount.QuadPart?-?(double)startCount.QuadPart)?/?(double)fre.QuadPart;
printf("用時%f\n",?dTimeTake);
system("pause");
return?0;
}
CLOCK()函數:
clock()是C/C++中的計時函數,而與其相關的數據類型是clock_t。在MSDN中,查得對clock函數定義如下:
clock_t
clock(void)
;
這個函數返回從“開啟這個程序進程”到“程序中調用clock()函數”時之間的CPU時鐘計時單元(clock
tick)數,在MSDN中稱之為掛鐘時間(wal-clock);若掛鐘時間不可取,則返回-1。其中clock_t是用來保存時間的數據類型,在time.h文件中,我們可以找到對它的定義:
#ifndef
_CLOCK_T_DEFINED
typedef
long
clock_t;
#define
_CLOCK_T_DEFINED
#endif
很明顯,clock_t是一個長整形數。在time.h文件中,還定義了一個常量CLOCKS_PER_SEC,它用來表示一秒鐘會有多少個時鐘計時單元,其定義如下:
#define
CLOCKS_PER_SEC
((clock_t)1000)
可以看到每過千分之一秒(1毫秒),調用clock()函數返回的值就加1。下面舉個例子,你可以使用公式clock()/CLOCKS_PER_SEC來計算一個進程自身的運行時間:
void
elapsed_time()
{
printf("Elapsed
time:%u
secs.\n",clock()/CLOCKS_PER_SEC);
}
當然,你也可以用clock函數來計算你的機器運行一個循環(huán)或者處理其它事件到底花了多少時間:
#include
stdio.h
#include
stdlib.h
#include
time.h
int
main(void)
{
long
i
=
10000000L;
clock_t
start,
finish;
double
duration;
/*
測量一個事件持續(xù)的時間*/
printf(
"Time
to
do
%ld
empty
loops
is
",
i)
;
start
=
clock();
while(
i--
);
finish
=
clock();
duration
=
(double)(finish
-
start)
/
CLOCKS_PER_SEC;
printf(
"%f
seconds\n",
duration
);
system("pause");
}
在筆者的機器上,運行結果如下:
Time
to
do
10000000
empty
loops
is
0.03000
seconds
上面我們看到時鐘計時單元的長度為1毫秒,那么計時的精度也為1毫秒,那么我們可不可以通過改變CLOCKS_PER_SEC的定義,通過把它定義的大一些,從而使計時精度更高呢?通過嘗試,你會發(fā)現這樣是不行的。在標準C/C++中,最小的計時單位是一毫秒。
time_t
time(
time_t
*timer
);
返回值是1970年到現在的秒數
用long型接就可以了
參數也是同樣意義
如
long
time_s
=
0;
time_s
=
time(
NULL
);
//
time_s就是1970年到現在的秒數
或者
long
*
time_s
=
NULL;
time(time_s);
//
*time_s就是1970年到現在的秒數
要計算前后一段時間的話之前取一次time,之后取一次相減就知道用了多少秒了
獲取程序運行時間:
在time.h里有函數clock();本身這個函數取得的時間好像是ms,要取得s就
寫成clock()/CLOCKS_PER_SEC;但CLOCKS_PER_SEC是在time.h里定義的,如果沒這個定義
那只能用clock();取得ms;這個函數的執(zhí)行不會中途停止,如果是在windows系統(tǒng)下,因為它是
多任務系統(tǒng),它需要在各任務之間切換,如果在測試過程中,執(zhí)行其他程序,所其得的時間,就會
出現差別,還有windows運行速度相當快,對于小型的測試,所得的時間幾乎為0,因此最好將
要測試的過程執(zhí)行100次或以上,然后再將取得的時間執(zhí)行次數;輸出非常耗時間,沒什么必要
的話,就不要輸出
這是一個測試選擇排序的程序
#include
stdio.h
#include
stdlib.h
#include
time.h
#define
M
1000
/*
執(zhí)行次數
*/
#define
N
500
/*
數組大小
*/
void
SelectSort(int
*a,int
l,int
r)
{
int
i,j,v;
for
(i=0;ir;i++)
{
for
(j=i+1;j=r;j++)
{
if
(*(a+i)*(a+j))
v=*(a+i),*(a+i)=*(a+j),*(a+j)=v;
}
}
}
void
main()
{
int
a[N],i,j;
double
start,finish;
/*
開始時間,結束時間
*/
start=(double)clock();
/*
我的time.h內沒有CLOCKS_PER_SEC
*/
for
(j=0;jM;j++)
{
/*
執(zhí)行M次
*/
for
(i=0;iN;*(a+i++)=rand()%10);
/*
每次重新賦值
*/
SelectSort(a,0,N-1);
}
finish=(double)clock();
printf("%.4fms",(finish-start)/M);
getchar();
}
分享名稱:c語言記錄運行時間的函數 c語言記錄運行時間的函數怎么寫
分享鏈接:http://www.chinadenli.net/article2/dohgpic.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站制作、品牌網站制作、App開發(fā)、微信小程序、標簽優(yōu)化、網站策劃
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)