综述
一旦你生成了event_base,并且注册了你想要的事件,你就可以让它工作起来,并且有事件的时候通知你了。
接口函数
-
#define EVLOOP_ONCE 0x01
-
#define EVLOOP_NONBLOCK 0x02
-
#define EVLOOP_NO_EXIT_ON_EMPTY 0x04
-
-
int event_base_loop(struct event_base *base, int flags)
默认该函数执行,他就会不停的检测是不是有注册的信号触发,直到event_base中没有注册的事件。如果flags被设置成了EVLOOP_ONCE的时候,他会等到有触发的信号,并把当前触发的队列中的callback执行之后返回,EV_LOOP_NONBLOCK设置的时候,他只会察看有没有触发的信号,没有就返回,有的话就执行,
你可以直接调用这个函数:
-
int event_base_dispatch(struct event_base *base)
他等同于不待参数的loop。
你也可以中止该函数的执行:
-
int event_base_loopexit(struct event_base *base, const struct timeval *tv);
-
int event_base_loopbreak(struct event_base *base)
有时间的tv表示这段时间过去后中止执行。
有时候你想检查一下event_base是否时通过某种方式中止的,例如上边两个函数中止的:
-
int event_base_got_exit(struct event_base *base);
-
int event_base_got_break(struct event_base *base)
假设你通过break中止了event_base的执行,你可以继续他:
-
int event_base_loopcontinue(struct event_base *)
有时候你想在callback里面想知道当前的时间,你有不想调用系统调用,你可以使用下面的函数:
-
int event_base_gettimeofday_cached(struct event_base *base,struct timeval *tv_out);//可能有些误差
-
int event_base_update_cache_time(struct event_base *base)//强制更新cache时间
有时候你想列出所有的event_base里面的事件,你可以通过下面的api
-
void event_base_dump_events(struct event_base *base, FILE *f) //dump 到文件中
-
-
//下面这两个函数会遍历event_base中的event,回调函数返回0表示继续,在回调函数中不应该修改event。
-
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,然后运行之。
-
#include<event2/event.h>
-
#include<stdio.h>
-
void cb_func(evutil_socket_t fd, short what, void *arg)
-
{
-
printf("get alerted !");
-
}
-
int main()
-
{
-
struct event_base * base;
-
struct event *ev1,*ev2;
-
struct timeval five_seconds = {5,0};
-
struct timeval five_seconds1 = {15,0};
-
base = event_base_new();
-
if(!base)
-
return 0;
-
ev1 = event_new(base, -1, EV_TIMEOUT,cb_func,NULL);
-
ev2 = event_new(base, -1, EV_TIMEOUT, cb_func,NULL);
-
event_add(ev1,&five_seconds);
-
event_add(ev2,&five_seconds1);
-
int tmp = event_base_dispatch(base);
-
printf("%d",tmp);
-
return 1;
-
}
-
阅读(4226) | 评论(0) | 转发(0) |