Linux或者VxWorks下面精確獲取函數運行的時間:
uint64 start_time; /* 起始時間 */
uint64 end_time; /* 結束時間 */
struct timespec ltv;
(void)clock_gettime(CLOCK_REALTIME, <v);
start_time = (uint64)ltv.tv_sec * 1000 * 1000 + (uint64)ltv.tv_nsec / 1000; /* (us) */
/* 待測函數 */
(void)clock_gettime(CLOCK_REALTIME, <v);
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)獲取系統時間。