织梦CMS - 轻松建站从此开始!

罗索

linux下利用signal handler来实现 timer

jackyhwei 发布于 2010-01-24 01:06 点击:次 
函数setitimer设置一个定时器,参数value指向一个itimerval结构,该结构决定了设置的定时器信息,结构成员it_value指定首 次定时的时间,结构成员it_interval指定下次定时的时间。
TAG:

  1. //start  
  2. #include <signal.h>  
  3. #include <sys/time.h>  
  4. #include <stdio.h>  
  5. #include <stdlib.h>  
  6. static void sighandler(int sigty);  
  7. bool goon=true;  
  8. int tot,last;  
  9. int main(){  
  10. struct itimerval v;  
  11. if (signal(SIGUSR1,sighandler)==SIG_ERR){  
  12. printf("error on reg");  
  13. exit(1);  
  14. }  
  15. if (signal(SIGALRM,sighandler)==SIG_ERR){  
  16. printf("error on reg");  
  17. exit(2);  
  18. }  
  19. v.it_value.tv_sec=3; //定时3秒  
  20. v.it_value.tv_usec=0;  
  21. v.it_interval.tv_sec=0;//只做一次  
  22. v.it_interval.tv_usec=0;  
  23. setitimer(ITIMER_REAL,&v,NULL);  
  24. printf("timer has be seted\n");  
  25. tot=0;  
  26. last=v.it_value.tv_sec;  
  27. goon=true;  
  28. while (goon){  
  29. getitimer(ITIMER_REAL,&v);  
  30. int now = v.it_value.tv_sec;  
  31. //printf("now: %d\n",now);  
  32. if (now==last-1){  
  33. raise(SIGUSR1);  
  34. tot++;  
  35. }  
  36. last=now;  
  37. }  
  38.  
  39. return 0;  
  40. }  
  41. static void sighandler(int sigty){  
  42. if (sigty==SIGUSR1){  
  43. struct itimerval v;  
  44. getitimer(ITIMER_REAL,&v);  
  45. printf("real time: %ld sec %ld\n",v.it_value.tv_sec ,v.it_value.tv_usec  );  
  46. }else if (sigty==SIGALRM){  
  47. printf("timer stop\n");  
  48. goon=false;  
  49. }  
  50. }  
  51. //end  

感谢:http://book.51cto.com/art/200902/109030.htm

#include  <sys/select.h>
#include  <sys/itimer.h>
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,则定时器在一次定时后终止。
 

(秩名)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201001/8369.html]
本文出处:51cto.com 作者:秩名
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容