libevent 使用流程
生活随笔
收集整理的這篇文章主要介紹了
libevent 使用流程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
libevent 使用流程
使用流程
事件處理框架 - event_base
- 相當于epoll紅黑樹的樹根
- 底座
- 抽象層,完成對event_base的封裝
- 每個event_base都有一種用于檢測那種事件已經就緒的"方法",或者說后端
- 創建event_base
- struct event_base* event_base_new(void);
- 失敗返回NULL
- 釋放event_base
- event_base_free(struct event_base* base);
- 循環監聽base對應的事件, 等待條件滿足
- event_base_dispatch(struct event_base* base);
- const char **event_get_supported_methods();
- 返回一個字符串數組中
- const char * event_base_get_method(const struct event_base *base);
- 返回當前使用的IO轉接
- 子進程創建成功后,父進程可以繼續使用event_base
- 子進程中需要繼續使用event_base需要重新進行初始化
- int event_reinit(struct event_base * base)
事件 - event
- void event_free(struct event *event);
設置未決事件(有資格但是沒有被處理的事件)
- 構造事件之后,在將其添加到 event_base 之前實際上是不能對其做任何操作的。使用event_add()將事件添加到event_base, 非未決事件 -> 未決事件.
- 函數
int event_add( struct event *ev, const struct timeval *tv ); - tv:
- NULL: 事件被觸發, 對應的回調被調用
- tv = {0, 100}, 如果設置的時間,
- 在改時間段內檢測的事件沒被觸發, 時間到達之后, 回調函數還是會被調用
- 函數調用成功返回0, 失敗返回-1
- int event_del(struct event *ev);
- 對已經初始化的事件調用 event_del()將使其成為非未決和非激活的。如果事件不是未決的或者激活的,調用將沒有效果。成功時函數返回 0,失敗時返回-1。
事件循環
- 一旦有了一個已經注冊了某些事件的 event_base, 就需要讓 libevent 等待事件并且通知事件的發生。
- int event_base_loop(struct event_base *base, int flags);
- 正常退出返回0, 失敗返回-1
- event_base_dispatch(struct event_base* base)
- 等同于沒有設置標志的 event_base_loop()
- 將一直運行,直到沒有已經注冊的事件了,或者調用 了event_base_loopbreak()或者 event_base_loopexit()為止。
- 返回值:成功0,失敗-1
- 如果 event_base 當前正在執行激活事件的回調 ,它將在執行完當前正在處理的事件后立即退出
- 讓event_base 立即退出循環
轉載于:https://www.cnblogs.com/joker-wz/p/10735410.html
總結
以上是生活随笔為你收集整理的libevent 使用流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vissim与matlab联调环境配置
- 下一篇: 优化理论16----Armijo-Gol