<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ## libevent 實現定時器流程 1. 首先初始化libevent庫,并保存返回的指針 ``` struct event_base * base = event_init(); ``` >實際上這一步相當于初始化一個Reactor實例;在初始化libevent后,就可以注冊事件了。 2. 初始化事件event,設置回調函數和關注的事件 ,事實上這等價于調用event_set(&ev, -1, 0, timer_cb, NULL); ``` evtimer_set(&ev, timer_cb, NULL); ``` 3. 設置event從屬的event_base ,這一步相當于指明event要注冊到哪個event\_base實例上; ``` event_base_set(base, &ev);? ``` 4. 是正式的添加事件的時候了 ``` event_add(&ev, timeout); ``` 基本信息都已設置完成,只要簡單的調用event_add()函數即可完成,其中timeout是定時值; 這一步相當于調用Reactor::register_handler()函數注冊事件。 5. 程序進入無限循環,等待就緒事件并執行事件處理 ``` event_base_dispatch(base); ``` ## 完整的示例代碼 ``` #include <iostream> #include "event.h" struct timeval tv; struct event ev; static void time_cb(evutil_socket_t fd, short event, void* arg) { std::cout << "timer wakeup" << std::endl; event_add(&ev, &tv); // reschedule timer } int main() { struct event_base* base = event_base_new(); tv.tv_sec = 2; tv.tv_usec = 0; // event *timeout = event_new(base, -1, EV_PERSIST|EV_TIMEOUT, time_cb, NULL); evtimer_set(&ev, time_cb, nullptr); event_base_set(base, &ev); event_add(&ev, &tv); event_base_dispatch(base); return 1; } ``` ## 還有第二種定時器的方法 定義一個定時器事件,使用event_new()創建了一個定時器事件.替換上述的步驟2和3 ``` struct event *event_new(struct event_base *, evutil_socket_t, short, event_callback_fn, void *); ``` 完整示例代碼 ``` #include <iostream> #include "event.h" struct timeval tv; struct event ev; static void time_cb(evutil_socket_t fd, short event, void* arg) { std::cout << "timer wakeup" << std::endl; //event_add(&ev, &tv); // reschedule timer } int main() { struct event_base* base = event_base_new(); tv.tv_sec = 2; tv.tv_usec = 0; event* ev = event_new(base, -1, EV_PERSIST|EV_TIMEOUT, time_cb, NULL); // evtimer_set(&ev, time_cb, nullptr); //event_base_set(base, &ev); event_add(ev, &tv); event_base_dispatch(base); return 1; } ```
                  <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>

                              哎呀哎呀视频在线观看