libevent event_set函数与event_add函数解析 [SYM]
2014-02-25 18:18
519 查看
event_set函数
void event_set(struct event *ev, int fd, short events, void (*callback)(int, short, void *), void *arg)
功能说明:
(1)event_set函数使用指定的句柄、关注的事件、事件发生时的回调函数、
回调函数的额外参数,初始化设置struct event结构对象。
ev->ev_callback = callback; ev->ev_arg = arg; ev->ev_fd = fd; ev->ev_events = events;
(2)将此event结构对象,绑定到全局current_base。
ev->ev_base = current_base;
(3)设置此event结构对象的优先级,默认为current_base中总有限级数的一半
if(current_base) ev->ev_pri = current_base->nactivequeues/2;
events参数可以是EV_READ | EV_WRITE。
#define EV_TIMEOUT 0x01 #define EV_READ 0x02 #define EV_WRITE 0x04 #define EV_SIGNAL 0x08 #define EV_PERSIST 0x10 /* Persistant event */
event_add函数
int event_add(struct event *ev, const struct timeval *tv);
功能:
(1)事件注册到IO事件模型,并注册到ev_base的eventqueue
struct event_base *base = ev->ev_base; res = evsel->add(evbase, ev); event_queue_insert(base, ev, EVLIST_INSERTED);
(2)如果该事件已经在活动事件队列或者超时队列中,先从中删除。
事件当前是否处于某个队列的状态保存在ev->ev_flags中,分别为:
EVLIST_TIMEOUT 0x01 位于超时队列 EVLIST_INSERTED 0x02 位于注册事件队列 EVLIST_ACTIVE 0x08 位于活动事件队列 EVLIST_INIT 0x80 初始化状态
(3)计算超时时标,并将ev加入超时队列
evutil_timeradd(&now, tv, &ev->ev_timeout); event_queue_insert(base, ev, EVLIST_TIMEOUT);
struct event结构
struct event { TAILQ_ENTRY (event) ev_next; TAILQ_ENTRY (event) ev_active_next; TAILQ_ENTRY (event) ev_signal_next; unsigned int min_heap_idx; /* for managing timeouts */ struct event_base *ev_base; int ev_fd; short ev_events; short ev_ncalls; short *ev_pncalls; /* Allows deletes in callback */ struct timeval ev_timeout; int ev_pri; /* smaller numbers are higher priority */ void (*ev_callback)(int, short, void *arg); void *ev_arg; int ev_res; /* result passed to event callback */ int ev_flags; };
相关文章推荐
- libevent库的使用--定时器的使用实例
- libevent 一个简单的event示例
- libevent 初始化与event_init
- 静态编译libevent
- Archlinux使用最新版goagent的几点注意(无法上传问题)
- cocos2dx加libevent库
- libevent的使用(socket)
- Gearman分布式任务处理系统(三)libevent介绍
- 用libevent实现一个小小的HTTP SERVER
- libevent(1)----库的下载和安装
- 在Linux上安装Memcached服务
- libevent简介和使用
- libevent 2.1.3 for VS2008 source code
- 安装memcached
- memcached 安装部署
- 一键安装thrift-0.9.0的脚本 推荐
- Memcached 安装
- libevent事件状态转化图
- memcached--------基于centos6源码安装 推荐
- libevent编译相关帖子