linux handler,linux下利用signal handler来实现 timer

//start

#include 

#include 

#include 

#include 

staticvoidsighandler(intsigty);

boolgoon=true;

inttot,last;

intmain(){

structitimerval v;

if(signal(SIGUSR1,sighandler)==SIG_ERR){

printf("error on reg");

exit(1);

}

if(signal(SIGALRM,sighandler)==SIG_ERR){

printf("error on reg");

exit(2);

}

v.it_value.tv_sec=3;//定时3秒

v.it_value.tv_usec=0;

v.it_interval.tv_sec=0;//只做一次

v.it_interval.tv_usec=0;

setitimer(ITIMER_REAL,&v,NULL);

printf("timer has be seted\n");

tot=0;

last=v.it_value.tv_sec;

goon=true;

while(goon){

getitimer(ITIMER_REAL,&v);

intnow = v.it_value.tv_sec;

//printf("now: %d\n",now);

if(now==last-1){

raise(SIGUSR1);

tot++;

}

last=now;

}

return0;

}

staticvoidsighandler(intsigty){

if(sigty==SIGUSR1){

structitimerval v;

getitimer(ITIMER_REAL,&v);

printf("real time: %ld sec %ld\n",v.it_value.tv_sec ,v.it_value.tv_usec  );

}elseif(sigty==SIGALRM){

printf("timer stop\n");

goon=false;

}

}

//end

#include 

#include 

int getitimer(int which, struct itimerval *value);

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

表10-6 参数which与定时器类型

取值  含义  信号发送

ITIMER_REAL  定时真实时间,与alarm类型相同。 SIGALRM

ITIMER_VIRT 定时进程在用户态下的实际执行时间。 SIGVTALRM

ITIMER_PROF  定时进程在用户态和核心态下 的实际执行时间。 SIGPROF

函数setitimer设置一个定时器,参数value指向一个itimerval结构,该结构决定了设置的定时器信息,结构成员it_value指定首 次定时的时间,结构成员it_interval指定下次定时的时间。定时器工作时,先将it_value的时间值减到0,发送一个信号,再将 it_value赋值为it_interval的值,重新开始定时,如此反复。如果it_value值被设置为0,则定时器停止定时;如果 it_value值不为0但it_interval值为0,则定时器在一次定时后终止。

(秩名)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值