1.
clock_gettime
函数"clock_gettime"是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。
播放器中,一般是用
CLOCK_MONOTONIC类型时间
函数介绍
1
2
|
#include<time.h>
intclock_gettime(clockid_tclk_id,structtimespec*tp);
|
参数
clk_id : 检索和设置的clk_id指定的时钟时间。
CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,
中间时刻如果系统时间被用户改成其他,则对应的时间相应改变
CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
struct timespec
{
time_t tv_sec; /* 秒*/
long tv_nsec; /* 纳秒*/
};
编译命令
gcc testClock_gettime.c -lrt -o testClock_gettime
编译结果
[root@localhost algorithm]# ./testClock_gettime
CLOCK_REALTIME: 1418955427, 611567940
CLOCK_MONOTONIC: 687, 121482785
CLOCK_PROCESS_CPUTIME_ID: 0, 7062436
CLOCK_THREAD_CPUTIME_ID: 0, 7073050
CLOCK_REALTIME: 1418955427, 611567940
CLOCK_MONOTONIC: 687, 121482785
CLOCK_PROCESS_CPUTIME_ID: 0, 7062436
CLOCK_THREAD_CPUTIME_ID: 0, 7073050
2. gettimeofday
使用C语言编写程序需要获得当前精确时间(1970年1月1日到现在的时间),或者为执行计时,可以使用gettimeofday()函数。
#include <sys/time.h>
int gettimeofday(struct
timeval*tv, struct timezone *tz);
其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:
struct timezone{
int tz_minuteswest;/*格林威治时间往西方的时差*/
int tz_dsttime;/*DST 时间的修正方式*/
}
timezone 参数若不使用则传入NULL即可。
而结构体
timeval的定义为:
struct timeval{
long int tv_sec; // 秒数
long int tv_usec; // 微秒数
}
它获得的时间精确到微秒(1e-6 s)量级。在一段代码前后分别使用gettimeofday可以计算代码执行时间:
struct timeval tv_begin, tv_end;
gettimeofday(&tv_begin, NULL);
foo();
gettimeofday(&tv_end, NULL);