C語言中的時(shí)間函數(shù)clock()和time()你都了解嗎
時(shí)間函數(shù)在編寫代碼的時(shí)候會(huì)經(jīng)常用到,下面就來總結(jié)一下clock和time函數(shù)的用法,函數(shù)原型如下:
clock_t __cdecl clock(void); __CRT_INLINE time_t __cdecl time(time_t *_Time);
clock函數(shù)
clock函數(shù)返回程序從運(yùn)行開始到當(dāng)前調(diào)用函數(shù)位置處CPU所使用的時(shí)間,通過這個(gè)函數(shù)就可以計(jì)算某段代碼運(yùn)行時(shí)所使用的時(shí)間。
下面通過一段簡(jiǎn)單的代碼測(cè)試一下:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char** argv) { clock_t start_t, end_t; start_t = clock(); sleep(1); end_t = clock(); printf("%d %d",start_t,end_t); return 0; }
剛進(jìn)入程序時(shí)通過clock函數(shù)讀取當(dāng)前CPU所使用的時(shí)間,然后使用sleep函數(shù)延時(shí)1秒,接著在使用clock函數(shù)讀取當(dāng)前CPU所使用的時(shí)間,這樣這兩個(gè)時(shí)間差應(yīng)該就是1秒。程序運(yùn)行結(jié)果如下:
通過打印的結(jié)果可以看出,第一次讀取的CPU時(shí)間是0,第二次讀取的CPU時(shí)間是1000,在程序中延時(shí)了1秒,說明clock函數(shù)返回的時(shí)間單位是毫秒(ms)。
如果要將程序運(yùn)行的時(shí)間換算為以秒為單位的話,這里就需要計(jì)算兩次運(yùn)行的時(shí)間差,然后除以每秒鐘系統(tǒng)的計(jì)數(shù)次數(shù)。系統(tǒng)中每秒鐘的計(jì)數(shù)次數(shù)用一個(gè)宏定義的值來表示。
#define CLOCKS_PER_SEC 1000
這個(gè)CLOCKS_PER_SEC的值為1000,說明CPU1秒鐘計(jì)數(shù)1000次,也就是1ms計(jì)數(shù)一次,這個(gè)和上面分析的結(jié)果是一樣的。
修改程序,將時(shí)間換算為秒,繼續(xù)測(cè)試。
通過結(jié)果可以看出這個(gè)循環(huán)耗時(shí)32ms,也就是0.032s。
time函數(shù)
time函數(shù)返回的是從 1970-01-01 00:00:00 開始到現(xiàn)在所經(jīng)過的秒數(shù)。
下面通過一個(gè)簡(jiǎn)單的代碼演示一下time函數(shù)的用法。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char** argv) { time_t seconds; seconds = time(NULL); printf("自1970-01-01 起的秒數(shù):%d s",seconds); return 0; }
time函數(shù)返回值是一個(gè)time_t的類型,它的本質(zhì)其實(shí)也是一個(gè)整形數(shù)據(jù)。
函數(shù)返回的是一個(gè)整形的秒數(shù),將返回值打印出來,結(jié)果如下:
將這個(gè)秒數(shù)通過時(shí)間戳在線轉(zhuǎn)換網(wǎng)站轉(zhuǎn)換為年月日,轉(zhuǎn)換網(wǎng)址為: https://tool.lu/timestamp/ 轉(zhuǎn)換結(jié)果如下:
轉(zhuǎn)換后的時(shí)間和程序運(yùn)行時(shí)的時(shí)間是一樣的,說明time函數(shù)返回的時(shí)間是準(zhǔn)確的,這樣在程序運(yùn)行過程中想要獲取準(zhǔn)確的時(shí)間時(shí),就可以通過time函數(shù)來獲取系統(tǒng)的準(zhǔn)確時(shí)間。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
一文搞懂C語言static關(guān)鍵字的三個(gè)作用
這篇文章主要介紹了C語言static關(guān)鍵字的三個(gè)作用,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04OpenCV實(shí)現(xiàn)繞圖片中任意角度旋轉(zhuǎn)任意角度
這篇文章主要為大家詳細(xì)介紹了在圖片不被裁剪時(shí),opencv如何實(shí)現(xiàn)繞圖片中任意點(diǎn)旋轉(zhuǎn)任意角度,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-09-09C語言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解
這篇文章主要介紹了C語言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解的相關(guān)資料,atoi函數(shù),主要功能是將一個(gè)字符串轉(zhuǎn)變?yōu)檎麛?shù),這里就實(shí)現(xiàn)這樣的函數(shù),需要的朋友可以參考下2017-08-08C語言中6組指針和自增運(yùn)算符結(jié)合方式的運(yùn)算順序問題
本文通過代碼實(shí)現(xiàn)分析了6種組合:* p++,(* p)++,* (p++),++* p,++( * p), * (++p),需要的朋友可以參考下2015-07-07C語言數(shù)據(jù)結(jié)構(gòu)之串插入操作
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之串插入操作的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10C語言中棧和隊(duì)列實(shí)現(xiàn)表達(dá)式求值的實(shí)例
這篇文章主要介紹了C語言中棧和隊(duì)列實(shí)現(xiàn)表達(dá)式求值的實(shí)例的相關(guān)資料,這里主要是對(duì)數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的理解和應(yīng)用,需要的朋友可以參考下2017-08-08