libevent-1.4.12-stable, libevent-2.0.4-alpha
libevent 的默认只实现了 on
ce timer,如果期望 periodic timer,还的自己处理下。这点实现得不好,应该支持 periodic timer 的。
----------------------------------------
#include <sys/time.h> // struct timeval
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <event.h>
void once_timer(int fd, short events, void *arg)
{
printf("once timer = %d\n", time(NULL));
free(arg); // free ev
}
void init_once_timer()
{
struct event *ev;
struct timeval tv = { 3, 0 };
ev = malloc(sizeof(struct event));
evtimer_set(ev, once_timer, (void *)ev);
evtimer_add(ev, &tv);
}
struct my_param {
struct event ev;
struct timeval tv;
};
void periodic_timer(int fd, short events, void *arg)
{
struct my_param *p = (struct my_param *)arg;
event_add(&p->ev, &p->tv);
printf("periodic timer = %d\n", time(NULL));
}
void init_periodic_timer()
{
struct my_param *p;
p = malloc(sizeof(struct my_param));
p->tv.tv_sec = 3;
p->tv.tv_usec = 0;
evtimer_set(&p->ev, periodic_timer, (void *)p);
evtimer_add(&p->ev, &p->tv);
}
int main()
{
event_init();
init_once_timer();
init_periodic_timer();
event_dispatch();
return 0;
}
----------------------------------------
$ ./a.out
once timer = 1264252894
periodic timer = 1264252894
periodic timer = 1264252897
periodic timer = 1264252900
----------------------------------------
ps. linux 下,gcc 记得带上 -lrt 参数,用于 clock_gettime。
评论