libevent 之 event config的相关函数介绍

1) struct event_config *event_config_new(void)
函数功能: 分配一个base 内部配置结构体
参数: 无
返回值:
    成功返回指向struct event_config的指针
    失败返回空

2) void event_config_free(struct event_config *cfg)
函数功能: 释放一个struct event_config结构体
参数:指向base内部配置的结构体的指针
返回值:无

3) int event_config_set_flag(struct event_config *cfg, int flag)
函数功能: 设置配置的标志位  为了后面的new base做准备
参数介绍:
    cfg: 配置内部结构体用event_config_new()创建
    flag: 配置的标记 会影响之后创建base时候的一些限制 取值为
        EVENT_BASE_FLAG_NOLOCK               //禁止对event_base 分配锁
        EVENT_BASE_FLAG_IGNORE_ENV           //禁止检查EVENT_*的环境变量 如"EVENT_PRECISE_TIMER"
        EVENT_BASE_FLAG_NO_CACHE_TIME        //base不缓存时间, 缓存时间是为了避免多次调用系统函数获得时间
        EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST /*如果后台方法是epoll,则此模式是指可以安全的使用libevent内部                                                                                                     changelist 进行批量增删而尽可能减少系统调用,这种模式可以让代                                                                                                   码性能更高,但是可能会引起Linux bug 如果有任何由dup()或者他                                                                                                 的变量克隆的fds,则是不安全的,这样做会引起奇怪并且难以检查的                                                                                                   bug */ 
        EVENT_BASE_FLAG_PRECISE_TIMER        /*使用精度高的定时器 如CLOCK_MONOTONIC, 如果系统支持                                                                                                          timerfd_create() 则在epoll会使用此系统定时器
                                                                                    不设置的话默认使用CLOCK_MONOTONIC_COARSE(如果系统支持),了解                                                                                      此宏,可以看clock_gettime()系统函数的使用*/
返回值:
    成功返回 0,失败返回-1

4) int event_config_avoid_method(struct event_config *cfg, const char *method)
函数功能: 由于event base 支持多种io机制,如poll/epoll/select等,若我们不想让让event base选择哪个,那么我们就可以用此函数设                   置禁止的io机制
                要想禁止多个可以多次调用此函数,内部用链表保存禁止的项
参数:
    cfg: 内部配置结构体指针
    method: 禁止的io机制 取值为 "evport","kqueue","epoll","devpoll","poll","select"
返回值:
    成功返回 0,失败返回-1

5) int event_config_require_features(struct event_config *cfg, int features)
函数功能: 设置配置的特性,event base会选择含有设置特性的io机制
          对配置设置此特性 主要是为了筛选合适的io机制     
          对于各个io机制支持的 特性如下:
              "evport":无 
              "kqueue":  EV_FEATURE_ET|EV_FEATURE_O1|EV_FEATURE_FDS
              "epoll":   EV_FEATURE_ET|EV_FEATURE_O1|EV_FEATURE_EARLY_CLOSE
              "devpoll": EV_FEATURE_FDS|EV_FEATURE_O1
              "poll":    EV_FEATURE_FDS
              "select":  EV_FEATURE_FDS                        
参数:
    cfg: 内部配置结构体指针
    features: 特性值 如下
            EV_FEATURE_ET          边缘触发触发机制,高效但是容易丢消息,注意与水平触发区分
            EV_FEATURE_O1          要求具有很多事件的io机制可以以近似O(1)处理事件,select和poll无法提供这种特征,它们只                                                      能提供近似O(N)的操作  
            EV_FEATURE_FDS         io机制可以处理包括sockets在内的各种文件描述符 
            EV_FEATURE_EARLY_CLOSE 检查事件连接是否关闭,可以使用此特性来检测链接是否关闭,而不需要读取此链接所有                                                                    未 决数据
返回值:
    成功返回 0, 失败返回-1

6) int event_config_set_max_dispatch_interval(struct event_config *cfg,
                                                                                 const struct timeval *max_interval, 
                                                                                 int max_callbacks, 
                                                                                 int min_priority)

函数功能:
    event base用一个数组根据优先级设置多个激活队列,值越小优先级越高
    此函数用于设置处理某个优先级队列的时候的一些时间和处理回调个数的限制
    
参数:
    cfg:内部配置结构体
    max_interval:  某个激活队列处理的时间间隔,如果在某个优先级队列处理的时间超过了此值,则退出当前队列,处理下一个队列    
    max_callbacks: 某个激活队列中 处理的回调的个数,当某个队列处理的激活个数大于此值,则处理下一个队列
        
    min_priority:  由于处理事件的时候根据优先级把激活的事件放到了不同的队列(一个数组实现的不同队列)
                          当数组下标小于此值的时候, 那么此下标对应的队列将不会被max_callbacks和max_interval所限制
                          当数组下标大于等于此值的时候,会受到max_callbacks和max_interval的限制
返回值:
    永远返回 0,所以保证你传入的参数不要有问题,否则可能会出现无法预知的错误                                            
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章