c語(yǔ)言記錄運(yùn)行時(shí)間的函數(shù) c語(yǔ)言記錄運(yùn)行時(shí)間的函數(shù)怎么寫(xiě)

C語(yǔ)言求一個(gè)程序運(yùn)行時(shí)間

C/C++中的計(jì)時(shí)函數(shù)是clock()。

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括萊西網(wǎng)站建設(shè)、萊西網(wǎng)站制作、萊西網(wǎng)頁(yè)制作以及萊西網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,萊西網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到萊西省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

所以,可以用clock函數(shù)來(lái)計(jì)算的運(yùn)行一個(gè)循環(huán)、程序或者處理其它事件到底花了多少時(shí)間,具體參考代碼如下:

#include?“stdio.h”

#include?“stdlib.h”

#include?“time.h”

int?main(?void?)

{

long????i?=?10000000L;

clock_t?start,?finish;

double??duration;

/*?測(cè)量一個(gè)事件持續(xù)的時(shí)間*/

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");

}

C語(yǔ)言中如何輸出顯示程序的運(yùn)行時(shí)間? 望賜教!

BOOL?QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);可以返回硬件支持的高精度計(jì)數(shù)器的頻率。先調(diào)用QueryPerformanceFrequency()函數(shù)獲得機(jī)器內(nèi)部計(jì)時(shí)器的時(shí)鐘頻率。接著在需要嚴(yán)格計(jì)時(shí)的事件發(fā)生前和發(fā)生之后分別調(diào)用QueryPerformanceCounter(),利用兩次獲得的計(jì)數(shù)之差和時(shí)鐘頻率,就可以計(jì)算出事件經(jīng)歷的精確時(shí)間。

#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?};??//儲(chǔ)存本機(jī)CPU時(shí)鐘頻率

LARGE_INTEGER?startCount?=?{?0?};

LARGE_INTEGER?endCount?=?{?0?};

QueryPerformanceFrequency(fre);//獲取本機(jī)cpu頻率

//開(kāi)始計(jì)時(shí)

QueryPerformanceCounter(startCount);

//運(yùn)算

for?(int?i?=?0;?i??10000000;?i++)

{

float?fTem1?=?random(100)*random(1000)*random(10000)*random(100000);

}

//結(jié)束計(jì)時(shí)

QueryPerformanceCounter(endCount);

//計(jì)算時(shí)間差

double?dTimeTake?=?((double)endCount.QuadPart?-?(double)startCount.QuadPart)?/?(double)fre.QuadPart;

printf("用時(shí)%f\n",?dTimeTake);

system("pause");

return?0;

}

C語(yǔ)言中有沒(méi)有用于計(jì)時(shí)的函數(shù)?怎么用?

CLOCK()函數(shù):

clock()是C/C++中的計(jì)時(shí)函數(shù),而與其相關(guān)的數(shù)據(jù)類(lèi)型是clock_t。在MSDN中,查得對(duì)clock函數(shù)定義如下:

clock_t

clock(void)

;

這個(gè)函數(shù)返回從“開(kāi)啟這個(gè)程序進(jìn)程”到“程序中調(diào)用clock()函數(shù)”時(shí)之間的CPU時(shí)鐘計(jì)時(shí)單元(clock

tick)數(shù),在MSDN中稱(chēng)之為掛鐘時(shí)間(wal-clock);若掛鐘時(shí)間不可取,則返回-1。其中clock_t是用來(lái)保存時(shí)間的數(shù)據(jù)類(lèi)型,在time.h文件中,我們可以找到對(duì)它的定義:

#ifndef

_CLOCK_T_DEFINED

typedef

long

clock_t;

#define

_CLOCK_T_DEFINED

#endif

很明顯,clock_t是一個(gè)長(zhǎng)整形數(shù)。在time.h文件中,還定義了一個(gè)常量CLOCKS_PER_SEC,它用來(lái)表示一秒鐘會(huì)有多少個(gè)時(shí)鐘計(jì)時(shí)單元,其定義如下:

#define

CLOCKS_PER_SEC

((clock_t)1000)

可以看到每過(guò)千分之一秒(1毫秒),調(diào)用clock()函數(shù)返回的值就加1。下面舉個(gè)例子,你可以使用公式clock()/CLOCKS_PER_SEC來(lái)計(jì)算一個(gè)進(jìn)程自身的運(yùn)行時(shí)間:

void

elapsed_time()

{

printf("Elapsed

time:%u

secs.\n",clock()/CLOCKS_PER_SEC);

}

當(dāng)然,你也可以用clock函數(shù)來(lái)計(jì)算你的機(jī)器運(yùn)行一個(gè)循環(huán)或者處理其它事件到底花了多少時(shí)間:

#include

stdio.h

#include

stdlib.h

#include

time.h

int

main(void)

{

long

i

=

10000000L;

clock_t

start,

finish;

double

duration;

/*

測(cè)量一個(gè)事件持續(xù)的時(shí)間*/

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");

}

在筆者的機(jī)器上,運(yùn)行結(jié)果如下:

Time

to

do

10000000

empty

loops

is

0.03000

seconds

上面我們看到時(shí)鐘計(jì)時(shí)單元的長(zhǎng)度為1毫秒,那么計(jì)時(shí)的精度也為1毫秒,那么我們可不可以通過(guò)改變CLOCKS_PER_SEC的定義,通過(guò)把它定義的大一些,從而使計(jì)時(shí)精度更高呢?通過(guò)嘗試,你會(huì)發(fā)現(xiàn)這樣是不行的。在標(biāo)準(zhǔn)C/C++中,最小的計(jì)時(shí)單位是一毫秒。

time_t

time(

time_t

*timer

);

返回值是1970年到現(xiàn)在的秒數(shù)

用long型接就可以了

參數(shù)也是同樣意義

long

time_s

=

0;

time_s

=

time(

NULL

);

//

time_s就是1970年到現(xiàn)在的秒數(shù)

或者

long

*

time_s

=

NULL;

time(time_s);

//

*time_s就是1970年到現(xiàn)在的秒數(shù)

要計(jì)算前后一段時(shí)間的話之前取一次time,之后取一次相減就知道用了多少秒了

那位高手知道C語(yǔ)言中如何查看程序運(yùn)行時(shí)間

獲取程序運(yùn)行時(shí)間:

在time.h里有函數(shù)clock();本身這個(gè)函數(shù)取得的時(shí)間好像是ms,要取得s就

寫(xiě)成clock()/CLOCKS_PER_SEC;但CLOCKS_PER_SEC是在time.h里定義的,如果沒(méi)這個(gè)定義

那只能用clock();取得ms;這個(gè)函數(shù)的執(zhí)行不會(huì)中途停止,如果是在windows系統(tǒng)下,因?yàn)樗?/p>

多任務(wù)系統(tǒng),它需要在各任務(wù)之間切換,如果在測(cè)試過(guò)程中,執(zhí)行其他程序,所其得的時(shí)間,就會(huì)

出現(xiàn)差別,還有windows運(yùn)行速度相當(dāng)快,對(duì)于小型的測(cè)試,所得的時(shí)間幾乎為0,因此最好將

要測(cè)試的過(guò)程執(zhí)行100次或以上,然后再將取得的時(shí)間執(zhí)行次數(shù);輸出非常耗時(shí)間,沒(méi)什么必要

的話,就不要輸出

這是一個(gè)測(cè)試選擇排序的程序

#include

stdio.h

#include

stdlib.h

#include

time.h

#define

M

1000

/*

執(zhí)行次數(shù)

*/

#define

N

500

/*

數(shù)組大小

*/

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;

/*

開(kāi)始時(shí)間,結(jié)束時(shí)間

*/

start=(double)clock();

/*

我的time.h內(nèi)沒(méi)有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();

}

分享名稱(chēng):c語(yǔ)言記錄運(yùn)行時(shí)間的函數(shù) c語(yǔ)言記錄運(yùn)行時(shí)間的函數(shù)怎么寫(xiě)
分享鏈接:http://bm7419.com/article2/dohgpic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作品牌網(wǎng)站制作、App開(kāi)發(fā)、微信小程序、標(biāo)簽優(yōu)化網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化