第二章 计算时间差
1. 实时函数clock_gettime 单位是十亿分之一秒,也就是纳秒(ns),使用的是标准POSIX实时时钟, 计算出来的结果可能有误差。
在POSIX1003.1中增添了这个函数,它的原型如下:
int clock_gettime(clockid_t clk_id, struct timespec *tp);
它有以下的特点:
1)它也有一个时间结构体:timespec ,timespec计算时间次数的单位是十亿分之一秒.
strace timespec{
time_t tv_sec;
long tv_nsec;
}
2)clockid_t是确定哪个时钟类型.
CLOCK_REALTIME: 标准POSIX实时时钟
CLOCK_MONOTONIC: POSIX时钟,以恒定速率运行;不会复位和调整,它的取值和CLOCK_REALTIME是一样的.
CLOCK_PROCESS_CPUTIME_ID和CLOCK_THREAD_CPUTIME_ID是CPU中的硬件计时器中实现的.
3)测试:
#include
#include
#include
#define MILLION 1000000
int main(void)
{
long int loop = 1000;
struct timespec tpstart;
struct timespec tpend;
long timedif;
clock_gettime(CLOCK_MONOTONIC, &tpstart);
while (--loop){
system("cd");
}
clock_gettime(CLOCK_MONOTONIC, &tpend);
timedif = MILLION*(tpend.tv_sec-tpstart.tv_sec)+(tpend.tv_nsec-tpstart.tv_nsec)/1000;
fprintf(stdout, "it took %ld microseconds\n", timedif);
return 0;
}
编译:
gcc test3.c -lrt -o test3
计算时间:
time ./test3
it took 3463843 microseconds
2. int gettimeofday(struct timeval *tv,stru