C語言中提供了許多庫函數(shù)來實現(xiàn)計時功能
創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元凌源做網(wǎng)站,已為上家服務(wù),為凌源各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
下面介紹一些常用的計時函數(shù)
1. time()
頭文件:time.h
函數(shù)原型:time_t time(time_t * timer)
功能:返回以格林尼治時間(GMT)為標準,從1970年1月1日00:00:00到現(xiàn)在的時此刻所經(jīng)過的秒數(shù)
用time()函數(shù)結(jié)合其他函數(shù)(如:localtime、gmtime、asctime、ctime)可以獲得當前系統(tǒng)時間或是標準時間。
用difftime函數(shù)可以計算兩個time_t類型的時間的差值,可以用于計時。用difftime(t2,t1)要比t2-t1更準確,因為C標準中并沒有規(guī)定time_t的單位一定是秒,而difftime會根據(jù)機器進行轉(zhuǎn)換,更可靠。
說明:C標準庫中的函數(shù),可移植性最好,性能也很穩(wěn)定,但精度太低,只能精確到秒,對于一般的事件計時還算夠用,而對運算時間的計時就明顯不夠用了。
2. clock()
頭文件:time.h
函數(shù)原型:clock_t clock(void);
功能:該函數(shù)返回值是硬件滴答數(shù),要換算成秒,需要除以CLK_TCK或者 CLK_TCKCLOCKS_PER_SEC。比如,在VC++6.0下,這兩個量的值都是1000。
說明:可以精確到毫秒,適合一般場合的使用。
3. timeGetTime()
頭文件:Mmsystem.h??引用庫: Winmm.lib
函數(shù)原型:DWORD timeGetTime(VOID);
功能:返回系統(tǒng)時間,以毫秒為單位。系統(tǒng)時間是從系統(tǒng)啟動到調(diào)用函數(shù)時所經(jīng)過的毫秒數(shù)。注意,這個值是32位的,會在0到2^32之間循環(huán),約49.71天。
說明:該函數(shù)的時間精度是五毫秒或更大一些,這取決于機器的性能??捎胻imeBeginPeriod和timeEndPeriod函數(shù)提高timeGetTime函數(shù)的精度。如果使用了,連續(xù)調(diào)用timeGetTime函數(shù),一系列返回值的差異由timeBeginPeriod和timeEndPeriod決定。
4. GetTickCount()
頭文件:windows.h
函數(shù)原型:DWORD WINAPI GetTickCount(void);
功能:返回自設(shè)備啟動后的毫秒數(shù)(不含系統(tǒng)暫停時間)。
說明:精確到毫秒。對于一般的實時控制,使用GetTickCount()函數(shù)就可以滿足精度要求。
5. QueryPerformanceCounter()、QueryPerformanceFrequency()
頭文件:windows.h
函數(shù)原型:BOOLQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
功能:前者獲得的是CPU從開機以來執(zhí)行的時鐘周期數(shù)。后者用于獲得你的機器一秒鐘執(zhí)行多少次,就是你的時鐘周期。
補充:LARGE_INTEGER既可以是一個8字節(jié)長的整型數(shù),也可以是兩個4字節(jié)長的整型數(shù)的聯(lián)合結(jié)構(gòu), 其具體用法根據(jù)編譯器是否支持64位而定:
在進行定時之前,先調(diào)用QueryPerformanceFrequency()函數(shù)獲得機器內(nèi)部定時器的時鐘頻率,然后在需要嚴格定時的事件發(fā)生之前和發(fā)生之后分別調(diào)用QueryPerformanceCounter()函數(shù),利用兩次獲得的計數(shù)之差及時鐘頻率,計算出事件經(jīng)歷的精確時間。
說明:這種方法的定時誤差不超過1微秒,精度與CPU等機器配置有關(guān),一般認為精度為透微秒級。在Windows平臺下進行高精度計時的時候可以考慮這種方法。
6. gettimeofday()
Linux C函數(shù)。
頭文件:sys/time.h
函數(shù)原型:int gettimeofday(struct timeval *tv,struct timezone *tz);
說明:其參數(shù)tv是保存獲取時間結(jié)果的結(jié)構(gòu)體,參數(shù)tz用于保存時區(qū)結(jié)果(若不使用則傳入NULL即可)。
timeval的定義為:
struct?timeval?{ ?
long?tv_sec;?//?秒數(shù)
long?tv_usec;?//微秒數(shù)
}
可見該函數(shù)可用于在linux中獲得微秒精度的時間。
說明:使用這種方式計時,精度可達微秒。經(jīng)驗證,在arm+linux的環(huán)境下此函數(shù)仍可使用。
有,CLOCK函數(shù)。
clock()是C/C++中的計時函數(shù),而與其相關(guān)的數(shù)據(jù)類型是clock_t。在MSDN中,查得對clock函數(shù)定義如下:clock_t clock(void) ; #ifndef _CLOCK_T_DEFINED ?typedef long clock_t;
#define _CLOCK_T_DEFINED ? ? ??#endif。
可以看到每過千分之一秒(1毫秒),調(diào)用clock函數(shù)返回的值就加1。
C語言是一門通用計算機編程語言,應(yīng)用廣泛。C語言的設(shè)計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機器碼以及不需要任何運行環(huán)境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規(guī)格寫出的C語言程序可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器以及超級電腦等作業(yè)平臺。
1967年,劍橋大學(xué)的Martin Richards對CPL語言進行了簡化,于是產(chǎn)生了BCPL語言。
c語言中計時函數(shù)單獨執(zhí)行的步驟:
1、在MSDN中,查得對clock函數(shù)定義。
2、這個函數(shù)返回從開啟這個程序進程到程序中調(diào)用clock函數(shù)時之間的CPU時鐘計時單元。
3、在MSDN中稱之為掛鐘時間(wal-clock),若掛鐘時間不可取,則返回-1。
在開始時用time()函數(shù)取一次時間,在結(jié)束時(輸入與生成相同時)再用time()取一次時間,之后求出再次時間之差即可。
*************************************************
#include
//for
printf()
#include
//for
system()
#include
//for
time()
time_t
void
main()
{
time_t
ts,te;
system("pause");
ts=time(null);
system("pause");
te=time(null);
printf("%ld\n",te-ts);
system("pause");
}
/////////////////////////////////////////////
輸出兩次按鍵之間的時間(秒)
分享標題:c語言中計時函數(shù)的使用 C語言計時
當前URL:http://aaarwkj.com/article20/doodhjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、靜態(tài)網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站內(nèi)鏈、ChatGPT、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)