Libevent

​使用libevent函数之前需要分配一个或者多个event_base结构体。每个event_base结构体持有一个事件集合,可以检测以确定哪个事件是激活的。

event_base_new函数分配并且返回一个新的具有默认设置的event_base。

event_config是一个容纳event_base配置信息的不透明结构体。

需要event_base时,将event_config传递给event_base_new_with_config函数。

libevent基本操作单元是event,每一个event代表了一些条件的集合,这些条件包括:

  • 文件描述符已经准备好读或写
  • 文件描述符正在变为就绪,准备好读或写(仅限于边沿触发)
  • 超时事件
  • 信号发生
  • 用户触发事件

所有事件具有相似的生命周期。调用libevent函数设置事件并且关联到event_base之后,事件进入已初始化状态。此时可以将事件添加到event_base中,这使之进入未决状态。在未决状态下,如果触发事件的条件发生,则事件进入激活状态,事件回调函数将被执行。如果配置为持久的,当执行回调时,事件将保持为未决状态;否则,执行完回调后,事件不再是未决的。删除操作可以让未决事件成为非未决已初始化的;添加操作可以让非未决事件再次成为未决的。


Reference:

  1. Libevent学习笔记(一):简介和安装
  2. Libevent学习笔记(二):创建event_base
  3. Libevent学习笔记(四):事件event