免费注册 查看新帖 |

Chinaunix

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

关于信号捕捉问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-01 22:42 |只看该作者 |倒序浏览
请看以下代码,(程序第一次循环捕捉到 alarm信号,但第二次却没有捕捉到该信号,请指教。
void sig_alrm(int signo);

int
main(   )
     .....
     .....
     .....

    signal(SIGALRM,sig_alrm);
    for( i = 0; i < 10 ; i++ ) {
          ......
          ......
          alarm( 30 );
          .........
          ........
         alarm( 0 );
          .....
          ....
     }

}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-03-02 08:08 |只看该作者

关于信号捕捉问题

你的循环不到30秒就执行一次alarm(30),当然捕捉不到该信号了。

论坛徽章:
0
3 [报告]
发表于 2003-03-02 09:49 |只看该作者

关于信号捕捉问题

请问怎样才能迅速而且不漏的捕捉每个ALARM信号?仅仅延长延时时间参数能解决问题吗?
谢谢解答。

论坛徽章:
0
4 [报告]
发表于 2003-03-02 11:28 |只看该作者

关于信号捕捉问题

你要使用那么多alram做什么


定时器吗

一个alram定时的到了时间后会发信号
此时程序会收到alram信号
这个信号的默认处理方法是忽略
当然你可以修改

一般使用alram后使用pause
pause 在收到一个信号后会返回
继续运行程序

建议先看看alarm使用说明

论坛徽章:
0
5 [报告]
发表于 2003-03-04 19:25 |只看该作者

关于信号捕捉问题

问题出在signal()函数的调用,这个调用只能将信号处理器生效一次。意思就是说,当第一次收到ALARM信号并处理后,对该信号的处理器将自动设置成默认方式。所以,在你的信号处理函数里必须重新调用signal()重新加载自己的处理器。
建议你使用sigaction()代替signal()。

论坛徽章:
0
6 [报告]
发表于 2003-03-04 22:20 |只看该作者

关于信号捕捉问题

void sig_alrm()
中必须有signal(SIGALRM,sig_alrm); 这段代码,否则,第一次alarm被捕捉交给sig_alarm处理以后在处理就不会给alarm了,所以必须在sig_alarm中递归引用signal(SIGALRM,sig_alrm);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP