貌似是可以的,不过感觉好像这样用不是很好,最好还是用回timer_settimer一些列函数吧,不过既然开了头,就看下alarm怎么用吧。
1. 所需头文件 #include<unistd.h>
2. 定义函数 unsigned int alarm(unsigned int seconds);
函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。
如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。
返回值 返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。
3. 代码
#include<unistd.h> #include<signal.h> void handler() { printf("Hello "); signal(SIGALRM,handler); //让内核做好准备,一旦接受到SIGALARM信号,就执行handler alarm(5); }/*这段函数的执行时间不计算在for循环的时间之内*/ void main() { int i; handler(); for(i=1;i<21;i++) { printf("sleep %d ... ", i); sleep(1); } }
4. 效果
刚开始在main中执行一次,然后每隔5秒执行一次handler() Hello sleep 1 ... sleep 2 ... sleep 3 ... sleep 4 ... sleep 5 ... Hello sleep 6 ... sleep 7 ... sleep 8 ... sleep 9 ... sleep 10 ... Hello