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)获取系统时间。