最近做的系统要测试,时间是关键,所以定时器成为了关键
double ms_time (void) //返回值单位为毫秒
{
static struct timeval tod;
gettimeofday (&tod, NULL);
//gttimeofday()会把目前的时间由tod所指的结构返回,
//时区的信息则放到NULL所指的结构中
return ((double)tod.tv_sec * 1000.0 + (double)tod.tv_usec / 1000.0);
}
struct itimerval
{
timeval it_value;
timeval it_interval
}
struct timeval
{
time_t tv_sec;
seconds_t tv_secs;
}
struct itimerval value;
value.it_value.tv_sec=25;
value.it_value.tv_usec=0;
value.it_interval=value.it_value;
setitimer(ITIMER_REAL,&value,NULL);
定时器25s启动一次,
it_value 存储定时时间
it_interval 设置定时时长
输出如下#include <stdio.h> #include <sys/time.h> void settimer(){ struct itimerval new,getnew; // new.it_value.tv_sec=5; int g; new.it_interval.tv_sec=5; new.it_interval.tv_usec=0; new.it_value.tv_sec=5; new.it_value.tv_usec=0; setitimer(ITIMER_REAL,&new,NULL); printf("inter getitimer:\n"); getitimer(ITIMER_REAL,&getnew); printf("it_value.tv_sec:%d\n",getnew.it_value.tv_sec); printf("it_value.tv_usec:%d\n",getnew.it_value.tv_usec); printf("it_interval.tv_sec:%d\n",getnew.it_value.tv_sec); printf("it_interval.tv_usec:%d\n",getnew.it_value.tv_usec); } void gettimer() { struct itimerval *new ; printf("\nout itimerval\n"); getitimer(ITIMER_REAL,new); printf("it_value.tv_sec:%d\n",new->it_value.tv_sec); printf("it_value.tv_usec:%d\n",new->it_value.tv_usec); printf("it_interval.tv_sec:%d\n",new->it_interval.tv_sec); printf("it_interval.tv_usec:%d\n",new->it_interval.tv_usec); } int main(void) { settimer(); gettimer(); return 0; }
root@q-laptop:/media/program/c/PongGame# ./gettimer inter getitimer: it_value.tv_sec:4 it_value.tv_usec:999954 it_interval.tv_sec:4 it_interval.tv_usec:999954 out itimerval it_value.tv_sec:4 it_value.tv_usec:999899 it_interval.tv_sec:5 it_interval.tv_usec:0 Segmentation fault
大家可以看到区别,我想了下,是不是设置的时候还不久,系统没有保存好呢?为啥过了一段时间就能看到了正常的数据了呢,您说怪不怪呢?请指教。(其实毫秒级别的错误我们还是可以接受的,嘿嘿)