libevent学习之创建,销毁event_base

在我们使用libevent函数之前,我们需要创建一个或多个event_base结构体,这些结构体都持有一个事件集合,此外,event_base还含有检测哪种事件已经就绪的method,这些method对于了解服务器开发的程序员来说应当不会特别陌生(其实我也就对前三个略有了解),它们分别是:

select

poll

epoll

kqueue

devpoll

evport

win32


一、好了,闲话少扯,我们先来看看怎么创建event_base对象吧:

1.使用event_base()

扫描二维码关注公众号,回复: 1621779 查看本文章

event_base_new函数分配并且返回一个新的具有默认设置的event_base.该函数原型如下:

struct event_base *event_base_new();

那么默认设置是指什么东西呢?其实就是,默认情况下,libevent会选择该平台下效率最高的I/O多路复用机制作为其检测事件是否就绪的method

2.自定义创建

自定义创建要用到以下三个函数:

struct event_config *event_config_new(void);  
struct event_base *event_base_new_with_config(const struct event_config *cfg);  
void event_config_free(struct event_config *cfg);

要使用这些函数分配 event_base,先调用 event_config_new()分配一个 event_config。 然后,调用“某些函数”来指定method属性,再调用event_base_new_with_config()创建对应的event_base。最后,调用 event_base_new_with_config()获取新的event_base。完成工作后,使用event_config_free ()释放 event_config。

上面所说的“某些函数”指的是如下几个:

int event_config_avoid_method(struct event_config *cfg, const char *method);  
  
int event_config_require_features(struct event_config *cfg, enum event_method_feature feature);  
  
int event_config_set_flag(struct event_config *cfg, enum event_base_config_flag flag); 

第一个,从名字上可知我们可以通过其设置不使用哪个method,const char  *method取的是之前提到的poll,epoll等,余下两个就不讲了,有兴趣的话可以自己去查,或者用的时候再查。

3可以使用event_init()创建

其原型如下:

struct event_base *event_init();

这个函数的工作与 event_base_new()类似,它将分配的 event_base 设置成当前的。没有其他方法改变当前 event_base。

二、创建好并且使用完 event_base 之后,使用 event_base_free()进行释放。


小贴士:

我们可以

使用event_base_get_method()返回 event_base 正在使用的方法;

使用event_base_get_features ()返回 event_base 支持的特征的比特掩码;

使用const char **event_get_supported_methods(void)获取本平台支持的所有method;





  

猜你喜欢

转载自blog.csdn.net/qq_35985044/article/details/78572006