简单的C语言模拟定时器,循环时间+绝对时间,根据《精通UNIX下C语言编程与项目实践》书上的例子搬过来的,挺好的,可能以后有用
#include<stdio.h>
#include<time.h>
#define MAXTIMER 20
typedef struct stuSimTimer{
char szName[20];//定时器名称
int nInterval;//定时间隔,值为0时取消定时
time_t nLast;//上次定时的系统时间
//int nRemain;//剩余定时时间
int (*pfunc)(char *); //回调函数指针
}SIMTIMER;
//回调函数
int func1(char *p){
printf("----%s----\n",p);
return 0;
}SIMTIMER sTimer[MAXTIMER] =
{
//定时器TIME1 定时间隔10,
{"TIME1",2,0,func1},
{"TIME2",4,0,func1}
};int nTopTimer = 2;
int main(){
int i;
//循环定时
while(1){
//sleep(1);
//遍历模拟定时器数组
for(i = 0;i < nTopTimer;i++){
//绝对时间 判断模拟定时器是否定时到达
if(time(NULL) - sTimer[i].nLast >= sTimer[i].nInterval){
//执行模拟定时器回调函数
sTimer[i].pfunc(sTimer[i].szName);
//重置模拟定时器
sTimer[i].nLast = time(NULL);
}
}
}
return 0;
}