1.时间表示
头文件:#include<time.h>
time_t time(time_t *tloc);
char *ctime(const time_t *clock);
time函数返回1970.1.1 0:0:0以来的秒数,存储在time_t结构中,不过这个函数值对我们来说没实际意义。
第二个函数返回值类型固定,一个可能值为 Thu Dec 7 14:58:59 2000这个字符串固定长度26
2.时间测量
(比如对算法进行时间分析,可以使用下面这个函数)
#include<sys/time.h>
int gertimeofday(struct timeval *tv,struct timezone *tz);//将时间保存在结构tv中,tz一般用null代替
struct timeval
{
long tv_sec;/*秒数*/
long tv_usec;/*微秒数*/
};
#include<sys/time.h>
#include<stdio.h>
#include<math.h>
void function()
{
unsigned int i,j;
double y;
for(i = 0;i < 1000;i++)
for(j = 0;j < 1000;j++)
y = sin((double)i)
}
main()
{
struct timeval tpstart,tpend;
float timeuse;
gettimeofday(&tpstart,NULL);
function();
gettimeofday(&tpend,NULL);
timeuse = 1000000 * (tpend.tv_sec - tpstart.tv_sec) + tpend.tv_usec - tpstart.tv_usec;
timeuse /= 1000000;
printf("Used Time: %f\n",timeuse);
exit(0);
}
3.计时器的使用
Linux提供了3个内部间隔计时器
ITIMER_REAL:减少实际时间,到时的时候发出SIGALRM信号
ITIMER_VIRTUAL:减少有效时间(进程执行的时间).产生SIGVTALRM信号
ITIMER_PROF:减少进程的有效时间和系统时间(为进程调度用的时间).这个 经常和上面一个使用来计算系统内核时间和用户时间,产生SIGPROF信号
具体使用函数:
#include <sys/time.h>;
int getitimer(int which,struct itimerval *value);//得到间隔计时器的时间值,保存在value中
int setitimer(int which,struct itimerval *newval,struct itimerval *oldval);//设置间隔计时器的时间值为newval,并将旧值保存在oldval中, which表示使用三个计时器中的那一个,itimerval结构中的it_value是减少的时间,当这个值为0的时候就发出相应的信号,然后设置为it_interval值
struct itimerval {
struct timeval it_interval;
struct timeval it_value;
}