/**************************************点点滴滴******汇江成海**********************************/
定时器详细描述可参考这位道友的博客文章:http://blog.csdn.net/sukhoi27smk/article/details/8733011
废话不多说,直接上代码
#include <stdio.h>
#include <signal.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int tick = 0;
timer_t tm;
union sigval v;
int my_timer_destory(timer_t *tmid);
void my_timer_thread(union sigval sv)
{
tick++;
printf("Timer tick:%d %d \n", tick, sv.sival_int);
if(tick >= 30)
{
my_timer_destory(tm);
}
}
int my_timer_create(void (*timer_fun)(union sigval v), timer_t *tmid)
{
struct sigevent sevt;
memset(&sevt, 0, sizeof(sevt));
sevt.sigev_notify = SIGEV_THREAD; //定时器到期后会创建一个线程去执行sigev_notify_function函数,执行完后线程退出
sevt.sigev_notify_function = timer_fun;
if(timer_create(CLOCK_MONOTONIC, &sevt, tmid) == -1)
{
printf("Timer create failed.\n");
return -1;
}
else
return 0;
}
int my_timer_set(timer_t *tmid)
{
struct itimerspec itm;
itm.it_value.tv_sec = 1;
itm.it_value.tv_nsec = 0;
itm.it_interval.tv_sec = 1;
itm.it_interval.tv_nsec = 0;
if(timer_settime(tmid, 0, &itm, NULL) == -1)
{
printf("Timer start failed.\n");
return -1;
}
else
return 0;
}
int my_timer_destory(timer_t *tmid)
{
if(*tmid == 0)
{
return 0;
}
else
return timer_delete(*tmid);
}
void main(void)
{
my_timer_create(my_timer_thread, &tm);
my_timer_set(&tm);
pause();
}
本文通过具体代码示例介绍了如何创建、设置及销毁POSIX定时器。利用C语言中的定时器API实现周期性的任务调度,并展示了如何通过回调函数处理定时器触发的事件。

1108

被折叠的 条评论
为什么被折叠?



