1. 程式人生 > >c語言時間函式

c語言時間函式

1.精確級別,納秒級別

原型

long sys_clock_gettime (clockid_t which_clock, struct timespec *tp);

which_clock引數解釋

CLOCK_REALTIME:系統實時時間,隨系統實時時間改變而改變,即從UTC1970-1-1 0:0:0開始計時,中間時刻如果系統時間被使用者該成其他,則對應的時間相應改變

CLOCK_MONOTONIC:從系統啟動這一刻起開始計時,不受系統時間被使用者改變的影響

CLOCK_PROCESS_CPUTIME_ID:本程序到當前程式碼系統CPU花費的時間

CLOCK_THREAD_CPUTIME_ID:本執行緒到當前程式碼系統CPU花費的時間

Middleware對POSIX提供的標準計時器API進行封裝,主要提供了兩種型別的時鐘的封裝。一種是CLOCK_REALTIME,另一種是CLOCK_MONOTONIC。對與man手冊的解釋是:
CLOCK_REALTIME: Systemwide realtime clock. 系統範圍內的實時時鐘。
CLOCK_MONOTONIC:Represents monotonic time. Cannot be set.表示單調時間,不能被設定的。


CLOCK_REALTIME:這種型別的時鐘可以反映wall clocktime,用的是絕對時間,當系統的時鐘源被改變,或者系統管理員重置了系統時間之後,這種型別的時鐘可以
得到相應的調整,也就是說,系統時間影響這種型別的timer。
CLOCK_MONOTONIC:用的是相對時間,他的時間是通過jiffies值來計算的。該時鐘不受系統時鐘源的影響,只受jiffies值的影響。

建議使用:
CLOCK_MONOTONIC這種時鐘更加穩定,不受系統時鐘的影響。如果想反映wall clocktime,就使用CLOCK_REALTIME。

time_t time(time_t *t);

#include <sys/time.h> int gettimeofday(struct timeval*tv, struct timezone *tz); 其引數tv是儲存獲取時間結果的結構體,引數tz用於儲存時區結果: struct timezone{ int tz_minuteswest;/*格林威治時間往西方的時差*/ int tz_dsttime;/*DST 時間的修正方式*/ } timezone 引數若不使用則傳入NULL即可。 而結構體timeval的定義為: struct timeval{ long int tv_sec; // 秒數 long int tv_usec; // 微秒數 } 它獲得的時間精確到微秒(1e-6 s)量級。
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include<sys/time.h>
#include<time.h>
#include<unistd.h>

 

int main()

{

	struct  timeval    tv;

	struct  timezone   tz;

	gettimeofday(&tv,&tz);


/*
	printf("tv_sec:%d\n",tv.tv_sec);

	printf("tv_usec:%d\n",tv.tv_usec);

	printf("tz_minuteswest:%d\n",tz.tz_minuteswest);

	printf("tz_dsttime:%d\n",tz.tz_dsttime);
*/

	time_t times;
	times = time(NULL);
	printf("time  = %d\n",times);
	
	struct timespec time1 = {0, 0};   
	  
	clock_gettime(CLOCK_REALTIME, &time1);        
	printf("CLOCK_REALTIME: %d, %d\n", time1.tv_sec, time1.tv_nsec);  
	   
	clock_gettime(CLOCK_MONOTONIC, &time1);        
	printf("CLOCK_MONOTONIC: %d, %d\n", time1.tv_sec, time1.tv_nsec);    
	 
	clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);        
	printf("CLOCK_PROCESS_CPUTIME_ID: %d, %d\n", time1.tv_sec, time1.tv_nsec);   

	clock_gettime(CLOCK_THREAD_CPUTIME_ID, &time1);        
	printf("CLOCK_THREAD_CPUTIME_ID: %d, %d\n", time1.tv_sec, time1.tv_nsec);   

}