在您可以使用任何有趣的libevent函数,需要分配一个或多个event_base结构。每个event_base结构持有一组事件,可以poll决定哪些事件是激活的。 如果一个event_base设置使用lock,可以访问多个线程之间。然而,它的循环只能在单个线程中运行。如果你想有多个线程轮询IO,你 ...
分类:
其他好文 时间:
2017-06-10 18:13:41
阅读次数:
127
我们知道libevent是一个Reactor模式的事件驱动的网络库。 到目前为止,我们已经看了核心的event和event_base结构体的源码,看了初始化这两个结构体的源码,看了注册event的源码,也将event注册到I/O多路复用监听的事件上了。现在准备工作都做好了,下面就是看运行时的主循环了 ...
分类:
其他好文 时间:
2017-06-01 18:40:18
阅读次数:
200
接下来就是将已经初始化的event注册到libevent的事件链表上,通过event_add()来实现,源码位于event.c中。 event_add() 这个函数主要完成了下面几件事: 1.将event注册到event_base的I/O多路复用要监听的事件中 2.将event注册到event_ba ...
分类:
其他好文 时间:
2017-06-01 16:40:01
阅读次数:
166
初始化完event_base后,下面要初始化event,通过调用event_set()实现 。相关源码位于event.c event_set() 通过传入的参数:fd, events, 回调函数,arg设置event的相应成员,并初始化event在小根堆中的索引为-1,以及设置event的优先级。 ...
分类:
其他好文 时间:
2017-05-30 16:17:01
阅读次数:
163
下面开始看初始化event_base结构的相关函数。相关源码位于event.c event_init() 首先调用event_init()初始化event_base结构体 struct event_base * event_init(void) { struct event_base *base = ...
分类:
其他好文 时间:
2017-05-30 16:13:04
阅读次数:
163
练习libevent库的使用,主要是几个API的调用顺序。根据event.h的开头注释部分可知,要使用libevent库,主要的几个API及调用顺序为: event_base()初始化event_base event_set()初始化event event_base_set()将event绑定到指定 ...
分类:
其他好文 时间:
2017-05-30 15:56:27
阅读次数:
132
event和event_base是libevent的两个核心结构体,分别是反应堆模式中的Event和Reactor。源码分别位于event.h和event-internal.h中 1.event: 从event这个结构体我们可以看到libevent将I/O、信号、定时器3种事件统一封装成一个even ...
分类:
其他好文 时间:
2017-05-29 22:18:09
阅读次数:
270
libevent通过socketpair实现对信号事件的监听。 event_base结构体有个成员sig,结构如下: event_base还有个成员evsigsel,用来描述信号处理的底层逻辑, ...
分类:
其他好文 时间:
2017-05-25 22:06:26
阅读次数:
202
libevent能够处理三种事件: I/O、信号、定时器。 涉及两个数据结构: event,表示一个事件 event_base,管理所有事件 本文主要介绍event_base,结构如下: evsel主要描述libevent的底层实现机制,linux系统对应epoll: ...
分类:
其他好文 时间:
2017-05-23 11:24:07
阅读次数:
184
位于代码event-internal.h中。 event_base类似事件的集合,你创建一个事件,必须将该事件指定一个集合。 struct event_base { 50 const struct eventop *evsel; /*evsel和evbase就类比与类和对象之间的关系,evbase是 ...
分类:
Web程序 时间:
2017-05-19 23:55:50
阅读次数:
286