博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux C系统编程:信号与定时器的使用
阅读量:6799 次
发布时间:2019-06-26

本文共 1198 字,大约阅读时间需要 3 分钟。

#include 
#include
void do_alarm(int num);int main(void){ //注册一个定时器 if(signal(SIGALRM , do_alarm) == SIG_ERR) { perror("register alarm fail"); return -1; } //alarm 3秒之后发送SIGALRM信号,但是一次性的 SIGALRM信号:定时器的信号 alarm(3); while(1) { printf("this is in main... \n"); sleep(3); } return 0 ;}void do_alarm(int num){ printf("this is in alarm ... &*&&\n"); //会影响sleep alarm(1);}

执行结果:

this is in main... 

this is in alarm ... &*&&
this is in main... 
this is in alarm ... &*&&
this is in main... 
this is in alarm ... &*&&
this is in main... 

......

这个头文件中。signal(参数1,参数2);参数1:我们要进行处理的信号。系统的信号我们可以再终端键入 kill -l查看(共64个)。其实这些信号时系统定义的宏。参数2:我们处理的方式(是系统默认还是忽略还是捕获),这里我写了一个处理函数,也就是说这里不是系统默认的。unsigned int alarm(unsigned int seconds);参数1:表示指定的秒数。 要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。需要注意的是,经过指定的秒数后,信号由内核产生,由于进程调度的延迟,所以进程得到控制从而能够处理该信号还需要一些时间。如果有以前为进程登记的尚未超时的闹钟时钟,而且本次调用的seconds值是0,则取消以前的闹钟时钟,其余留值仍作为alarm函数的返回值。以上程序是利用定时器产生的一个信号SIGALRM信号,在收到该信号同时会调用do_alarm函数。这也就类似单片机的定时中断,当定时到了,就跳到中断服务函数里去执行相应的程序。

转载地址:http://bufwl.baihongyu.com/

你可能感兴趣的文章
QTabWiget Change Color 改变颜色
查看>>
模板方法在Spring事务中的应用
查看>>
Ext.LoadMask遮罩的效果几种实现方式
查看>>
理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤
查看>>
各个JAVA场景下的内存图
查看>>
用GMF生成简化的数据库设计器
查看>>
【干货】程序员常访问的国外技术交流网站汇总
查看>>
HDU 2503 a/b + c/d(最大公约数与最小公倍数,板子题)
查看>>
Java直接内存与非直接内存性能测试
查看>>
linux watchdog demo hacking
查看>>
[LintCode] 最长上升子序列
查看>>
TP v5中Request取值方式变化
查看>>
日志分析系统——Hangout源码学习
查看>>
第 4 章 Windows Server
查看>>
网站平台架构演变史(三) - 数据库表的查询优化
查看>>
5.9. sort - sort lines of text files
查看>>
深入理解line-height与vertical-align(1)
查看>>
到目前为止给DataGrid添加Number列最简单方法
查看>>
《快学Scala》第六章 对象 第七章 包和引入
查看>>
RabbitMQ学习系列(二): RabbitMQ安装与配置
查看>>