精確獲取函數運行時間,精確到微秒


Linux或者VxWorks下面精確獲取函數運行的時間:

uint64 start_time;    /* 起始時間 */

uint64 end_time;    /* 結束時間 */ 

struct timespec ltv;
(void)clock_gettime(CLOCK_REALTIME, &ltv);
start_time = (uint64)ltv.tv_sec * 1000 * 1000 + (uint64)ltv.tv_nsec / 1000; /* (us) */

/* 待測函數 */

(void)clock_gettime(CLOCK_REALTIME, &ltv);
end_time = (uint64)ltv.tv_sec * 1000 * 1000 + (uint64)ltv.tv_nsec / 1000; /* (us) */

 

總結:

Linux系統中獲取時間,精確到秒級以下的有兩個,一個是timespec,一個是timeval。兩者的具體定義和差別可以參考如下。

 

 

一,struct timespec

系統中該結構體定義如下,

typedef long time_t;

#ifndef _TIMESPEC

#define _TIMESPEC

struct timespec{

    time_t tv_sec;    /* seconds 秒 */

    long tv_nsec;    /* nanoseconds 納秒 */

};

#endif

struct timespec有兩個成員,一個是秒,一個是納秒,所以最高精確度是納秒。

一般由函數int clock_gettime(clockid_t, struct timespec *)獲取特定時鍾的時間,常用如下4種時鍾:

CLOCK_REALTIME             系統當前時間,從1970年1.1日算起

CLOCK_MONOTONIC            系統的啟動時間,不能被設置

CLOCK_PROCESS_CPUTIME_ID   本進程運行時間

CLOCK_THREAD_CPUTIME_ID    本線程運行時間

 

二,struct timeval

struct timeval{

time_t tv_sec;    /* seconds 秒 */

long tv_usec;    /* microseconds 微秒 */

};

struct timezone{

int tz_minuteswest;   /* minutes west of Greenwich */

int tz_dsttime;       /* type of DST correction */

};

struct timeval 有兩個成員,一個是秒,一個是微秒,所以最高精確度是微秒。

一般由函數int gettimeofday(struct timeval *tv, struct timezone *tz)獲取系統時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM