定时器+信号的方式
timer_create + sigaction
信号的安装和定时器创建:
-
typedef void (*timer_func)(int)
-
int g_timer_id ;//时间的一个参数ID,可用于识别触发的具体ID
-
void *timer_function(int)//回调函数
-
{
-
//定时处理的函数
-
}
-
void init_sigaction(timer_func timer_function)//参数是回调函数的指针
-
{
-
struct sigevent evp;
-
struct sigaction act;
-
-
memset(&act, 0, sizeof(act));
-
act.sa_handler = timer_function;//回调函数
-
act.sa_flags = 0;
-
sigemptyset(&act.sa_mask);
-
if (sigaction(SIGUSR1, &act, NULL) == -1)//将回调函数注册到用户自定义1的信号中
-
{
-
perror("fail to sigaction");
-
exit(-1);
-
}
-
-
memset(&evp, 0, sizeof(struct sigevent));
-
evp.sigev_signo = SIGUSR1;
-
evp.sigev_notify = SIGEV_SIGNAL;
-
-
evp.sigev_value.sival_ptr = &g_timerid;
-
-
-
if (timer_create(CLOCK_REALTIME, &evp, &g_timer_id) == -1)//创建一个系统实时时钟的定时器
-
{
-
perror("fail to timer_create");
-
exit(-1);
-
}
-
-
}
配置定时器的触发时间:
-
void init_basetime(int usec_time)//参数是微秒数
-
{
-
struct itimerspec it;
-
UINT32 sec;
-
UINT32 usec;
-
-
sec = usec_time/1000000;//秒
-
usec = (usec_time%1000);//微秒
-
-
-
it.it_interval.tv_sec = sec;
-
it.it_interval.tv_nsec = usec;
-
it.it_value.tv_sec = sec;
-
it.it_value.tv_nsec = usec;
-
timer_settime(g_timerid, 0, &it, 0);//设定定时器,并启动
-
}
使用:
这两个函数在主函数中调用就可以,只要main函数不退出,系统都会定时的去触发回调函数去执行内容。
阅读(1607) | 评论(0) | 转发(0) |