時間獲取函數封裝--linux/unix

項目開發中在提升程序效率時,首先要定位到代碼那個部分耗費時間較長,進而改進代碼--縮短執行時間。這就要一個時間獲取函數來準確獲取時間,在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

不少時候不要第二個參數值,因此通常都設置爲‘NULLunix

//返回值是微妙單位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;

}

相關文章
相關標籤/搜索