直接上代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>
#include <event2/event.h>
#include <event2/buffer.h>
#include <event2/bufferevent.h>
struct event_base *base;
//循环计算回调函数
void xunhuan_act(evutil_socket_t listener, short event, void *arg);
int main()
{
struct event *timer_event;
struct timeval tv; //定时器
evthread_use_pthreads();
base = event_base_new();
if (!base)
{
puts("创建base错误");
return -1;
}
tv.tv_sec = 1;
tv.tv_usec = 0;
timer_event = event_new(base, -1, EV_TIMEOUT,xunhuan_act,event_self_cbarg());
//event_self_cbarg()函数只能在2.1版本有,可以传递time_event动态分配空间的指针
//指针传递后,需要在回调函数中释放,不释放容易造成内存泄露,
if(event_timer==NULL)
{
puts("新建timer_event错误");
return -2;
}
event_add(timer_event,&tv);
event_base_dispatch(base);
return 0;
}
//循环计算处理函数
void float_act(evutil_socket_t listener, short event, void *arg)
{
struct event *timer_event=arg;
struct timeval tv; //定时器
tv.tv_sec = 1;
tv.tv_usec = 0;
//释放内存
if(timer_event!=NULL)
{
event_free(timer_event);
timer_event=NULL;
}
//循环处理内容
timer_event = event_new(base, -1, EV_TIMEOUT,float_act,event_self_cbarg());
//新建超时事件,分配内存空间
event_add(timer_event,&tv);
return;
}