libevent event_set函数与event_add函数解析 [SYM]

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;
 };

转载于:https://my.oschina.net/luckysym/blog/203047

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值