一、clock_t clock(void)函數
說明:clock_t其實就是long,即長整形。該函數返回值是硬件滴答數,要換算成毫秒或者秒。換算為毫秒需要除以1000,若換算為秒則除以CLOCKS_PER_SEC。在linux上,如果使用sleep函數,是不會計算在內的。如果處理器時間使用的是不可用的,或者它的值不能被表示,函數返回值為(clock_t)-1。具體查看以下例子(GCC編譯):
1 int main(int argc, char *arg[]) 2 { 3 printf("CLOCKS_PER_SEC = %lf\n", (double)(CLOCKS_PER_SEC)); 4 clock_t time = clock(); 5 sleep(5); 6 int i; 7 for(i = 0; i < 1000000000; i++){} 8 clock_t second_time = clock(); 9 printf("ms:%lf\n", (double)((second_time-time) / 1000)); 10 printf("s:%lf\n", (double)((second_time-time) / CLOCKS_PER_SEC)); 11 12 return 0; 13 14 }
二、time_t time(time_t *t)函數
說明:返回從1970年1月1日00:00:00開始到現在的秒數,如果t不為空,則將結果也保存在t指向的內存中。具體查看以下例子(GCC編譯):
1 int main(int argc, char *arg[]) 2 { 3 int i; 4 time_t first_time = time(NULL); 5 for(i = 0; i < 1000000000; i++){} 6 time_t second_time = time(NULL); 7 printf("s:%lf\n", (double)(second_time-first_time)); 8 9 return 0; 10 11 }
三、int gettimeofday(struct timeval *tv, struct timezone *tz) 函數
說明: struct timeval{
long tv_sec; //秒
long tv_usec; //微秒
};
將目前的時間保存在tv指向的內存中,tz結構體設置為NULL即可。具體查看以下例子(GCC編譯):
1 int main(int argc, char *arg[]) 2 { 3 struct timeval first_time, second_time; 4 gettimeofday(&first_time, NULL); 5 sleep(2); 6 gettimeofday(&second_time, NULL); 7 double time_val = (second_time.tv_sec - first_time.tv_sec) * 1000000 + second_time.tv_usec - first_time.tv_usec; 8 printf("time_val(ms) = %lf\n", time_val / 1000.0); 9 10 return 0; 11 12 }