代码改变世界

精确获取函数运行时间,精确到微秒

2016-09-20 12:59  houpy  阅读(5221)  评论(0编辑  收藏  举报

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