1.一个event_base持有了一系列的事件,并监控和决定哪些事件需要激活,
2.每一个event_base背后都有一个支持其工作的方法(诸如select,poll,epoll,kquene...),默认情况会选择最快的方法,可以自定义设置
3.event_base可以被设置为lock状态,这样多个线程可以并发安全访问,但是其事件循环只能运行在一个线程当中。如果多个线程需要检查io事件,那么必须要每个线程一个event_base.
struct event_base *event_base_new(void);
struct event_config *event_config_new(void);
struct event_base *event_base_new_with_config(const struct event_config *cfg);
struct event_base *event_base_new_with_config(const struct event_config *cfg);
void event_config_free(struct event_config *cfg);
int event_config_set_num_cpus_hint(struct event_config *cfg, int cpus)
int event_config_set_max_dispatch_interval(struct event_config *cfg,const struct timeval *max_interval, int max_callbacks,int min_priority);
const char **event_get_supported_methods(void);
const char *event_base_get_method(const struct event_base *base);
enum event_method_feature event_base_get_features(const struct event_base *base);
void event_base_free(struct event_base *base);
int event_base_priority_init(struct event_base *base, int n_priorities);
int event_base_get_npriorities(struct event_base *base);
//调用了fork或其他相关函数,又需要继续使用event_base,则需要重新初始化
int event_reinit(struct event_base *base);
example:
#include <stdio.h>
#include <event2/event.h>
int main()
{
struct event_base * pBase = event_base_new();
printf("libevent version %s
",event_get_version());
const char **p = event_get_supported_methods();
while( *p != NULL)
{
printf("%s
",*p);
++p;
}
struct event_config * pec=event_config_new();
event_config_avoid_method(pec,"select");
event_config_require_features(pec,EV_FEATURE_ET);
struct event_base * pbase2=event_base_new_with_config(pec);
event_config_free(pec);
event_base_free(pBase);
return 0;
}