Chinaunix首页 | 论坛 | 博客
  • 博客访问: 383094
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1767
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-24 16:18
个人简介

为啥不能追求自己的爱好一辈子呢

文章分类

全部博文(80)

文章存档

2017年(1)

2015年(2)

2014年(18)

2013年(59)

分类: LINUX

2013-10-12 17:54:45

综述

   一旦你生成了event_base,并且注册了你想要的事件,你就可以让它工作起来,并且有事件的时候通知你了。

接口函数

   

点击(此处)折叠或打开

  1. #define EVLOOP_ONCE 0x01
  2. #define EVLOOP_NONBLOCK 0x02
  3. #define EVLOOP_NO_EXIT_ON_EMPTY 0x04

  4. int event_base_loop(struct event_base *base, int flags)
       默认该函数执行,他就会不停的检测是不是有注册的信号触发,直到event_base中没有注册的事件。如果flags被设置成了EVLOOP_ONCE的时候,他会等到有触发的信号,并把当前触发的队列中的callback执行之后返回,EV_LOOP_NONBLOCK设置的时候,他只会察看有没有触发的信号,没有就返回,有的话就执行,
      你可以直接调用这个函数:

点击(此处)折叠或打开

  1. int event_base_dispatch(struct event_base *base)
          他等同于不待参数的loop。

      你也可以中止该函数的执行:
   

点击(此处)折叠或打开

  1. int event_base_loopexit(struct event_base *base, const struct timeval *tv);
  2. int event_base_loopbreak(struct event_base *base)
    有时间的tv表示这段时间过去后中止执行。
    有时候你想检查一下event_base是否时通过某种方式中止的,例如上边两个函数中止的:
 

点击(此处)折叠或打开

  1. int event_base_got_exit(struct event_base *base);
  2. int event_base_got_break(struct event_base *base)
        假设你通过break中止了event_base的执行,你可以继续他:
   

点击(此处)折叠或打开

  1. int event_base_loopcontinue(struct event_base *)
   有时候你想在callback里面想知道当前的时间,你有不想调用系统调用,你可以使用下面的函数:
   

点击(此处)折叠或打开

  1. int event_base_gettimeofday_cached(struct event_base *base,struct timeval *tv_out);//可能有些误差
  2. int event_base_update_cache_time(struct event_base *base)//强制更新cache时间
  有时候你想列出所有的event_base里面的事件,你可以通过下面的api
  

点击(此处)折叠或打开

  1. void event_base_dump_events(struct event_base *base, FILE *f)   //dump 到文件中

  2. //下面这两个函数会遍历event_base中的event,回调函数返回0表示继续,在回调函数中不应该修改event。

  3. typedef int (*event_base_foreach_event_cb)(const struct event_base *, const struct event *, void *); int event_base_foreach_event(struct event_base *base,event_base_foreach_event_cb fn, void *arg);


     



例子:

  把下面保存成test.cpp ,   通过gcc -g test.cpp -levent,然后运行之。


点击(此处)折叠或打开

  1. #include<event2/event.h>
  2. #include<stdio.h>
  3. void cb_func(evutil_socket_t fd, short what, void *arg)
  4. {
  5.     printf("get alerted !");
  6. }
  7. int main()
  8. {
  9.     struct event_base * base;
  10.     struct event *ev1,*ev2;
  11.     struct timeval five_seconds = {5,0};
  12.     struct timeval five_seconds1 = {15,0};
  13.     base = event_base_new();
  14.     if(!base)
  15.         return 0;
  16.     ev1 = event_new(base, -1, EV_TIMEOUT,cb_func,NULL);
  17.     ev2 = event_new(base, -1, EV_TIMEOUT, cb_func,NULL);
  18.     event_add(ev1,&five_seconds);
  19.     event_add(ev2,&five_seconds1);
  20.     int tmp = event_base_dispatch(base);
  21.     printf("%d",tmp);
  22.     return 1;
  23. }












阅读(4226) | 评论(0) | 转发(0) |
0

上一篇:event_base

下一篇:libevent event 事件的机制

给主人留下些什么吧!~~