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,所以保證你傳入的參數不要有問題,否則可能會出現無法預知的錯誤                                            
    

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