1.事件的分类
  1. 文件可写
  2. 文件可读
  3. 超时发生
  4. 信号发生
  5. 用户触发事件
 
2事件的生命周期
 
     --非 persistent
 
                                                             event_del(nopending)                                           在callback中通过event_add(重新pending)构成循环
                                                                             ^                                                                     ^
                                                                              |                                                                       |
     event_new(initialized)---->event_add(pending)-->事件发生(active)-->callback被调用(stoping)-->event_free(destory)
 
 
   ----persistent
                                              event_del(nopending)
                                                  ^
                                                   |
   event_new(initialized)-->event_add(pending)->事件发生(active)-->callback被调用(pending)和第二步构成循环->event_free(destory)
 
 
  1. 事件状态
           EV_TIMEOUT:事件超时,应该在event_add的第二个参数设置。这个时间是相对于上一次active发生call_back调用后的时间
              EV_READ:文件可读
              EV_WRITE:文件可写
              EV_SIGNAL:信号发生在一个进程中只应该有一个event_base监听和处理信号,即便有多个,也只有一个会收到信号(即使信号不一样))
           EV_PERSIST:保持pending状态,事件可被多次激活  

Thus, if you have an event with flags EV_READ|EV_PERSIST and a timeout of five seconds, the event will become active:

  • Whenever the socket is ready for reading.

  •                                   Whenever five seconds have passed since the event last became active.
          
             EV_ET:边缘触发。(状态满足触发一次,而不是条件满足多次触发)
 
 
接口
 
#define EV_TIMEOUT      0x01
#define EV_READ         0x02
#define EV_WRITE        0x04
#define EV_SIGNAL       0x08
#define EV_PERSIST      0x10
#define EV_ET           0x20

typedef void (*event_callback_fn)(evutil_socket_t, shortvoid *);

struct event *event_new(struct event_base *base, evutil_socket_t fd,
    short what, event_callback_fn cb,
    void *arg);

void event_free(struct event *event);
 
 
//把事件本身作为回调函数的参数,需要使用下面的api
void *event_self_cbarg();
 
//辅助宏
 
//超时只会被激活一次
#define evtimer_new(base, callback, arg) \
    event_new((base), -1, 0, (callback), (arg))
#define evtimer_add(ev, tv) \
    event_add((ev),(tv))
#define evtimer_del(ev) \
    event_del(ev)
#define evtimer_pending(ev, tv_out) \

    event_pending((ev), EV_TIMEOUT, (tv_out))
 
 
#define evsignal_new(base, signum, cb, arg) \

    event_new(base, signum, EV_SIGNAL|EV_PERSIST, cb, arg)
 
 
 
struct event *hup_event;
struct event_base *base = event_base_new();

/* call sighup_function on a HUP signal */

hup_event = evsignal_new(base, SIGHUP, sighup_function, NULL);
 
#define evsignal_add(ev, tv) \
    event_add((ev),(tv))
#define evsignal_del(ev) \
    event_del(ev)
#define evsignal_pending(ev, what, tv_out) \
    event_pending((ev), (what), (tv_out))

libevent学习四(Working with events)的更多相关文章

  1. ZigBee学习四 无线+UART通信

    ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...

  2. TweenMax动画库学习(四)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  3. libevent学习之二:Windows7(Win7)下编译libevent

    Linux下编译参考源码中的README文件即可,这里主要记录Windows下的编译. 一.准备工作 去官网下载最新的稳定发布版本libevent-2.0.22-stable 官网地址:http:// ...

  4. SVG 学习<四> 基础API

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  5. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  6. SCARA——OpenGL入门学习四(颜色)

    OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...

  7. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  8. 【传智播客】Libevent学习笔记(二):创建event_base

    目录 00. 目录 01. 简介 02. 创建默认的event_base 03. 创建复杂的event_base 3.1 event_config_new函数 3.2 event_base_new_w ...

  9. libevent reference Mannual III--working with events

    FYI: http://www.wangafu.net/~nickm/libevent-book/TOC.html Working with events Libevent’s basic unit ...

随机推荐

  1. 牛客网多校训练第一场 I - Substring(后缀数组 + 重复处理)

    链接: https://www.nowcoder.com/acm/contest/139/I 题意: 给出一个n(1≤n≤5e4)个字符的字符串s(si ∈ {a,b,c}),求最多可以从n*(n+1 ...

  2. 「LG2664 树上游戏」

    题目 这真是一道神仙的一批的题目 定义\(s(i,j)\)表示从点\(i\)到点\(j\)经过的颜色数量 设 \[sum_i=\sum_{j=1}^ns(i,j)\] 求出所有的\(sum_i\) 考 ...

  3. PHP----作业:查询数据显示在页面上

    作业: 查询INFO表所有数据,显示在页面上(表格)性别要显示男女 民族 显示民族名称 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra ...

  4. 什么是Apache Isis

    这个页面展示了一个现代的 Apache Isis 应用程序的外观. 下边是Isis 插件里的 todoapp 示例 (非 ASF)截图,你可以随意使用. 界面里对应的领域类可以在这里找到. 这个 to ...

  5. iOS开发之GCD总结

    直接贴出常用的函数,方便要用的时候直接使用. -------------     type 1 ---------------- 说明  : 创建一个dispatch_group_t,每次网络请求前先 ...

  6. 作为测试新手,web测试从何开始学起?

    我们先来弄清楚web测试的测试范围,通常web测试包含:功能测试.性能测试.浏览器兼容测试.安全测试以及用户界面测试等.那么,作为一个初级测试员或者实习测试员,最开始的能做的只能是功能测试和用户界面测 ...

  7. android:windowSoftInputMode属性详解 软键盘

    android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一] ...

  8. 【题解】洛谷P1198 [JSOI2008] 最大数(线段树)

    洛谷P1198:https://www.luogu.org/problemnew/show/P1198 思路 一道水水的线段树 20分钟A掉 这道题只涉及到单点修改和区间查询 所以这道题甚至不用Laz ...

  9. SQL 二

    1.执行DML语句的步骤:在数据库缓冲区缓存中搜索相关的块:将块从数据文件复制到缓冲区:将变更向量写入日志缓冲区:将变更向量应用于数据库缓冲区缓存.2.重做可以保护的段类型:索引段.表段.撤销段.3. ...

  10. windows搭建本地IIS服务器+php安装+移动设备内网访问服务器

    启动IIS服务 1. 打开 “控制面板” => "程序" => "启用或关闭Window功能": 2. 接着勾选相应设置: 3. 继续勾选对应目录下 ...