最近看排序算法的资料,想测一下各算法的运行时间才发觉没有查过计时器的资料,以前只听说过定时器。
刚开始想到的是alarm信号,然后接收到信号时间量就加1,后来发现这是秒级的精度,根本达不到要求,搜了
一下struct timeval能达到微秒级的计时精度
#include<sys/time.h>
#include<unistd.h>
#include<stdio.h>
int main()
{
struct timeval tv1,tv2;
gettimeofday(&tv1,0);
sleep(2);
gettimeofday(&tv2,0);
printf("tv2_sec-tv1_sec; %d ",tv2.tv_sec-tv1.tv_sec);
printf("tv2_usec-tv1_usec; %d ",tv2.tv_usec-tv1.tv_usec);
double res=(double)(tv2.tv_usec-tv1.tv_usec)/1000000+tv2.tv_sec-tv1.tv_sec;
printf("res=%lf ",res);
return 0;
}
#include<unistd.h>
#include<stdio.h>
int main()
{
struct timeval tv1,tv2;
gettimeofday(&tv1,0);
sleep(2);
gettimeofday(&tv2,0);
printf("tv2_sec-tv1_sec; %d ",tv2.tv_sec-tv1.tv_sec);
printf("tv2_usec-tv1_usec; %d ",tv2.tv_usec-tv1.tv_usec);
double res=(double)(tv2.tv_usec-tv1.tv_usec)/1000000+tv2.tv_sec-tv1.tv_sec;
printf("res=%lf ",res);
return 0;
}
timeval的结构如下:
strut timeval
{
long tv_sec; /* 秒数 */
long tv_usec; /* 微秒数 */
};
上述方法可以进行微妙级别的计时,当然也可以进行毫秒和秒的计时。
效果如图