直接上代码:
#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;
}
本文介绍了一个使用libevent库实现的C语言程序,该程序通过设置定时器来执行循环任务。具体展示了如何创建事件基、设置定时器,并在定时器触发时调用自定义的回调函数来执行特定操作。

435

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



