<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 4.1 創建event_base ###4.1.1 創建默認的event_base ***event_base_new()***函數分配并且返回一個新的具有默認設置的 event_base。函數會檢測環境變量,返回一個到 event_base 的指針。如果發生錯誤,則返回 NULL。選擇各種方法時,函數會選擇 OS 支持的最快方法。 ```cpp struct event_base *event_base_new(void); ``` >大多數程序使用這個函數就夠了。 event_base_new()函數聲明在<event2/event.h>中,首次出現在 libevent 1.4.3版。 ###4.1.2 創建復雜的event_base 要對取得什么類型的 event_base 有更多的控制,就需要使用 **event_config**。 event_config 是一個容納 event_base 配置信息的不透明結構體。需要 event_base 時,將 event_config 傳遞給**event_base_new_with_config ()。** ###創建接口 ```cpp 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。 然后,對 event_config 調用其它函數,設置所需要的 event_base 特征。最后,調用 event_base_new_with_config()獲取新的 event_base。完成工作后,使用 event_config_free ()釋放 event_config。 ```cpp int event_config_avoid_method(struct event_config *cfg, const char *method); enum event_method_feature { EV_FEATURE_ET = 0x01, EV_FEATURE_O1 = 0x02, EV_FEATURE_FDS = 0x04, }; int event_config_require_features(struct event_config *cfg, enum event_method_feature feature); enum event_base_config_flag { EVENT_BASE_FLAG_NOLOCK = 0x01, EVENT_BASE_FLAG_IGNORE_ENV = 0x02, EVENT_BASE_FLAG_STARTUP_IOCP = 0x04, EVENT_BASE_FLAG_NO_CACHE_TIME = 0x08, EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST = 0x10, EVENT_BASE_FLAG_PRECISE_TIMER = 0x20 }; int event_config_set_flag(struct event_config *cfg, enum event_base_config_flag flag); ``` 調用 event_config_avoid_method ()可以通過名字讓 libevent 避免使用特定的可用后端 。 調用 event_config_require_feature ()讓 libevent 不使用不能提供所有指定特征的后端。 調用 event_config_set_flag()讓 libevent 在創建 event_base 時設置一個或者多個將在下面介紹的運行時標志。 **event_config_require_features()可識別的特征值有:** * EV_FEATURE_ET:要求支持邊沿觸發的后端 * EV_FEATURE_O1:要求添加、刪除單個事件,或者確定哪個事件激活的操作是 O(1)復雜度的后端 * EV_FEATURE_FDS:要求支持任意文件描述符,而不僅僅是套接字的后端 **event_config_set_flag()可識別的選項值有:** * EVENT_BASE_FLAG_NOLOCK :不要為 event_base 分配鎖。設置這個選項可以 為 event_base 節省一點用于鎖定和解鎖的時間,但是讓在多個線程中訪問 event_base 成為不安全的。 * EVENT_BASE_FLAG_IGNORE_ENV :選擇使用的后端時,不要檢測 EVENT_* 環境 變量。使用這個標志需要三思:這會讓用戶更難調試你的程序與 libevent 的交互。 * EVENT_BASE_FLAG_STARTUP_IOCP:僅用于 Windows,讓 libevent 在啟動時就 啟用任何必需的 IOCP 分發邏輯,而不是按需啟用。 * EVENT_BASE_FLAG_NO_CACHE_TIME :不是在事件循環每次準備執行超時回調時 檢測當前時間,而是在每次超時回調后進行檢測。注意:這會消耗更多的 CPU時間。 * * EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST :告訴 libevent ,如果決定使 用 epoll 后端,可以安全地使用更快的基于 changelist 的后端。epoll-changelist 后端可以 在后端的分發函數調用之間,同樣的 fd 多次修改其狀態的情況下,避免不必要的系統 調用。但是如果傳遞任何使用 dup()或者其變體克隆的 fd 給 libevent,epoll-changelist 后端會觸發一個內核 bug,導致不正確的結果。在不使用 epoll 后端的情況下,這個標 志是沒有效果的。也可以通過設置 * EVENT_EPOLL_USE_CHANGELIST 環境變量來 打開 epoll-changelist 選項。 上述操作 event_config 的函數都在成功時返回0,失敗時返回-1。 >設置 event_config,請求 OS 不能提供的后端是很容易的 。比如說,對于 libevent 2.0.1-alpha, 在 Windows 中是沒有 O(1)后端的;在 Linux 中也沒有同時提供 EV_FEATURE_FDS 和 EV_FEATURE_O1 特征的后端。如果創建了 libevent 不能滿足的配置, event_base_new_with_config ()會返回 NULL。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看