項目開發中在提升程序效率時,首先要定位到代碼那個部分耗費時間較長,進而改進代碼--縮短執行時間。這就要一個時間獲取函數來準確獲取時間,在linux/unix系統都有對應的時間獲取函數,不過要對其轉換封裝才能夠獲得咱們想要且看得懂的數值,下例是以封裝gettimeofday()函數和struct timeval結構體獲取的時間獲取函數。linux
#include <sys/time.h> #include <unistd.h>
函數
定義函數:int gettimeofday (struct timeval * tv, struct timezone * tz);
函數說明:gettimeofday()會把目前的時間有tv 所指的結構返回,當地時區的信息則放到tz 所指的結構中。
timeval 結構定義爲:
struct timeval{
long tv_sec; //秒
long tv_usec; //微秒
};
timezone 結構定義爲:
struct timezone
{
int tz_minuteswest; //和Greenwich 時間差了多少分鐘
int tz_dsttime; //日光節約時間的狀態
};spa
不少時候不要第二個參數值,因此通常都設置爲‘NULL’unix
//返回值是微妙單位orm
UB8 ldw_time()開發
{get
UB8 tm;it
struct timeval tv;效率
gettimeofday(&tv, NULL);gc
tm = tv.tv_sec * 1000000 + tv.tv_usec;
return tm;
}
也能夠將封裝好的時間獲取函數用宏定義,宏定義是在預處理時處理的,在代碼執行上效率很高
#define START_TIME(_ST) _ST = ldw_time();
#definie END_TIME(_ET) _ET = ldw_time();
#defime WASTE_TIME(_ST,_ET) (_ET-_ST)
int main(int argc,char *argv[])
{
long t1= 0;
long t2 = 0;
char buf[1*1024*1024];
t1 = ldw_time();
//START_TIME(t1);
memset(buf,0,sizeof(buf));
t2 = ldw_time();
//END_TIME(t2);
printf("memset time:%ul\n",t2-t1);
// printf("memset time:%ul\n",WASTE_TIME(t1,t2));
return 0;
}