#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<time.h>
#include<sys/time.h>
#define N 100 //设置最大的定时器个数
int i=0,t=1 //i代表定时器的个数;t表示时间,逐秒递增
struct Timer //Timer结构体,用来保存一个定时器的信息
{
int total_time //每隔total_time秒
int left_time //还剩left_time秒
int func //该定时器超时,要执行的代码的标志
}myTimer[N] //定义Timer类型的数组,用来保存所有的定时器
void setTimer(int t,int f) //新建一个计时器
{
struct Timer a
a.total_time=t
a.left_time=t
a.func=f
myTimer[i++]=a
}
void timeout() //判断定时器是否超时,以及超时时所要执行的动作
{
printf("Time: %d\n",t++)
int j
for(j=0j<ij++)
{
if(myTimer[j].left_time!=0)
myTimer[j].left_time--
else
{
switch(myTimer[j].func)
{ //通过匹配myTimer[j].func,判断下一步选择哪种 *** 作
case 1:
printf("------Timer 1: --Hello Aillo!\n")break
case 2:
printf("------Timer 2: --Hello Jackie!\n")break
case 3:
printf("------Timer 3: --Hello PiPi!\n")break
}
myTimer[j].left_time=myTimer[j].total_time //循环计时
}
}
}
int main() //测试函数,定义三个定时器
{
setTimer(3,1)
setTimer(4,2)
setTimer(5,3)
signal(SIGALRM,timeout) //接到SIGALRM信号,则执行timeout函数
while(1)
{
sleep(1) //每隔一秒发送一个SIGALRM
kill(getpid(),SIGALRM)
}
exit(0)
}
可以用alarm信号做:alarm(设置信号传送闹钟)
相关函数 signal,sleep
表头文件 #include<unistd.h>
定义函数 unsigned int alarm(unsigned int seconds)
函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。
返回值返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。
#include<unistd.h>
#include<signal.h>
void handler() {
//这里读跳变次数
}
main()
{
int i
signal(SIGALRM,handler)//这里设置时钟信号的响应函数
alarm(1)//这里设置每一秒钟发送一个时钟信号
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)