免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2816 | 回复: 5
打印 上一主题 下一主题

alarm和setitimer可否共存 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-22 10:38 |只看该作者 |倒序浏览
我指的是在同一个进程中,它们会不会相互影响?虽然有点自找麻烦的嫌疑
测试代码:

  1. #include<stdio.h>
  2. #include<sys/time.h>
  3. #include<signal.h>

  4. int sec;
  5. void handle()
  6. {
  7.         printf("THIS is alarm timer!\n");
  8.         signal(SIGALRM,handle);
  9.         alarm(10);
  10. }
  11. void sigroutine(int signo)
  12. {
  13.         switch (signo){
  14.                 case SIGALRM:
  15.                         printf("Catch a signal -- SIGALRM \n");
  16.                         signal(SIGALRM, sigroutine);
  17.                         break;
  18.                 case SIGVTALRM:
  19.                         printf("Catch a signal -- SIGVTALRM \n");
  20.                         signal(SIGVTALRM, sigroutine);
  21.                         break;
  22.         }
  23.         return;
  24. }
  25. int main()
  26. {

  27.         struct itimerval value, ovalue, value2;
  28.         sec = 5;
  29.         printf("process id is %d\n", getpid());
  30.         signal(SIGALRM, handle);
  31.         alarm(10);
  32.         signal(SIGVTALRM, sigroutine);
  33.         value2.it_value.tv_sec = 1;
  34.         value2.it_value.tv_usec = 0;
  35.         value2.it_interval.tv_sec = 1;
  36.         value2.it_interval.tv_usec = 0;
  37.         setitimer(ITIMER_VIRTUAL, &value2, &ovalue);
  38.         for(;;)
  39.                 ;
  40. }
复制代码

结果:

  1. process id is 25819
  2. Catch a signal -- SIGVTALRM
  3. Catch a signal -- SIGVTALRM
  4. Catch a signal -- SIGVTALRM
  5. Catch a signal -- SIGVTALRM
  6. Catch a signal -- SIGVTALRM
  7. Catch a signal -- SIGVTALRM
  8. Catch a signal -- SIGVTALRM
  9. THIS is alarm timer!
  10. Catch a signal -- SIGVTALRM
  11. Catch a signal -- SIGVTALRM
  12. Catch a signal -- SIGVTALRM
  13. Catch a signal -- SIGVTALRM
  14. Catch a signal -- SIGVTALRM
  15. Catch a signal -- SIGVTALRM
  16. Catch a signal -- SIGVTALRM
  17. THIS is alarm timer!
  18. Catch a signal -- SIGVTALRM
复制代码

[ 本帖最后由 ruoyisiyu 于 2008-1-22 10:49 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-01-22 11:01 |只看该作者
alarm就是一个ITIMER_REAL setitimer

论坛徽章:
0
3 [报告]
发表于 2008-01-22 11:12 |只看该作者
原帖由 flw2 于 2008-1-22 11:01 发表
alarm就是一个ITIMER_REAL setitimer

这个我理解,我想知道的是,在一个进程中我用alarm定义一个REAL TIMER,然后又用setitimer定义一个VT TIMER,二者之间有没有影响。上面的测试代码显示二者之间没有影响,但是在我作的一个类似的项目里面,得不到我想要的结果

论坛徽章:
0
4 [报告]
发表于 2008-01-22 14:16 |只看该作者
没人感兴趣?

论坛徽章:
0
5 [报告]
发表于 2008-01-22 14:33 |只看该作者
原帖由 ruoyisiyu 于 2008-1-22 14:16 发表
没人感兴趣?

没用过man?

论坛徽章:
0
6 [报告]
发表于 2008-01-22 14:43 |只看该作者
不同平台下的实现好像有差异
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP