struct itimerval {
struct timeval it_interval; /* 每隔多长时间触发定时器*/
struct timeval it_value; /* 当前触发的定时器 */
};
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
定时器的时间到,定时器将it_value递减到0时,产生一个sigalrm信号
#define REFRESH_TIME 5
void set_refresh_time(int sec)
{
struct itimerval nvalue;
nvalue.it_value.tv_sec = sec;
nvalue.it_value.tv_usec=0;
nvalue.it_interval.tv_sec = sec;//每隔sec时间触发一次定时器
nvalue.it_interval.tv_usec = 0;
/*此处使用的是ITIMER_REAL,所以对应的是SIGALRM信号*/
setitimer(ITIMER_REAL, &nvalue, NULL);
}
/*定时器处理函数*/
void timer_handler(int msg)
{
switch(msg)
{
case SIGALRM:
printf("to do someting when set timer is coming \n");
break;
default:
break;
}
return;
}
int main(int argc, char *argv[])
{
int value;
signal( SIGALRM, timer_handler);
if(!argv[1])
{
printf("use default time %d\n", REFRESH_TIME);
set_refresh_time(REFRESH_TIME);
}
else
{
value = atoi(argv[1]);
set_refresh_time(value);
}
while(1)
{
}
}