1、跟libevent中的信号(signal)类似,定时器是对 event_ 等基础函数做了一个简单的封装。
// 给一个定时器事件赋值,需要传递事件指针,不常用
#define evtimer_assign(ev, b, cb, arg) \
event_assign((ev), (b), -1, 0, (cb), (arg))
// 新建一个定时器事件对象
#define evtimer_new(b, cb, arg) event_new((b), -1, 0, (cb), (arg))
// 将定时器事件接加入libevent中,状态变为待决
#define evtimer_add(ev, tv) event_add((ev), (tv))
// 从libevent中删除定时器事件
#define evtimer_del(ev) event_del(ev)
// 判断定时器事件是否为待决状态
#define evtimer_pending(ev, tv) event_pending((ev), EV_TIMEOUT, (tv))
// 判断定时器事件是否为已初始化状态
#define evtimer_initialized(ev) event_initialized(ev)
与evtimer_new 创建的事件是非持久化的,即默认情况下只会响应一次。
2、下面我们来看一个例子:
#include <iostream>
#include <signal.h>
#include <event2/event.h>
#include <event2/listener.h>
#include <event2/thread.h>
#define SPORT 5001
using namespace std;
static struct timeval tv1 = { 1, 0 }; //1秒 0微妙
static void timer1(evutil_socket_t fd, short which, void* arg) {
cout <<

文章介绍了Libevent中的定时器事件处理,包括evtimer_new创建的非持久定时器和使用event_new创建的持久定时器。它还讨论了两种跟踪未决事件超时值的方法:二叉堆和双链队列,并展示了如何使用event_base_init_common_timeout进行性能优化。
最低0.47元/天 解锁文章
343





