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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精确获取函数运行时间,精确到微秒相关的知识,希望对你有一定的参考价值。

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

以上是关于精确获取函数运行时间,精确到微秒的主要内容,如果未能解决你的问题,请参考以下文章

mysql5.5时间戳能不能精确到毫秒?

获得精确时间到微秒

使用微秒来计算PHP脚本的执行时间

Linux获取当前年月日后缀精确到微秒,例如2017-05-06T23:57:07.713171

使用系统定时器SysTick实现精确延时微秒和毫秒函数

织女星开发板RISC-V内核实现微秒级精确延时