定时器,即用来设置一个我们指定时间,定时器超时之后去执行某个任务。
或者间隔一段时间去执行任务。
1.最简单定时器
先贴一个最简单的定时器,在超时之后,打印time over :sumA+sumB = xxx;
test.h
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
typedef void (*callbackP)();//回调函数指针
typedef struct myCallback_t
{
int sumA;//回调函数的加数
int sumB;//回调函数的加数
callbackP function;//函数管理器
}myCallback_t;//回调结构体
int registeCallbackFun(myCallback_t *registedFun);//注册函数
int doFun(myCallback_t *callbackFun);//调用回调函数
int callbackFun(myCallback_t *sumCopte);//回调函数
A.c
#include "test.h"
int callbackFun(myCallback_t *sumCopte)
{
printf("time over :sumA+sumB = %d\n", sumCopte->sumA+sumCopte->sumB);
return 0;
}
int registeCallbackFun(myCallback_t *registedFun)
{
registedFun->sumA = 1;
registedFun->sumB = 3;
registedFun->function = (void*)callbackFun;
return 1;
}
int doFun(myCallback_t *callbackFun)
{
callbackFun->function(callbackFun);
}
int mysleep(int t)
{
struct timeval time;
time.tv_sec = t;
time.tv_usec = 0;
select(0, NULL, NULL, NULL, &time);
return 0;
}
int main()
{
//定义回调结构体
myCallback_t callback_t;
//注册回调函数,即添加执行任务函数到结构体
if(registeCallbackFun(&callback_t) != 1){
printf("Registe failed.\n");
}
//延时2s
mysleep(2);
//触发事件,回调,通过doFun函数调用被执行函数
doFun(&callback_t);
return 0;
}
运行结果:
2.多个定时器
但是通常我们需要多个定时器,回头更....