1、 struct event_base *event_base_new(void);初使化一個event base對象。
2、 void event_base_free(struct event_base *base);釋放一個event base對象
3、 int event_reinit(struct event_base *base);重新初使化一個已經存在的eventbase對象
4、 int event_base_loop(struct event_base *base, int flags);
此函數是循環的監控在base中注冊的事件,直到沒有注冊的事件。
Flags包含兩個值,為EVLOOP_ONCE時,等待事件的發生然後執行所有的事件,結束,隻執行一次;EVLOOP_NONBLOCK時,隻檢查目前有沒有活動的事件然後執行他們。
5、 int event_base_dispatch(struct event_base *base);這個函數與event_base_loop沒有設定flag時的功能相同。
6、 int event_base_loopexit(struct event_base *base, const structtimeval *tv);退出循環,等待tv個時間後退出,如果tv為NULL則沒有延遲,并且将所有的活動的事件都執行完之後才退出,如果目前沒有event loop則對下次的eventloop有效。
7、 int event_base_loopbreak(struct event_base *base);退出循環,不等待活動事件執行完,直接退出,如果目前沒有eventloop,函數不起任何的作用。
8、 int event_base_gettimeofday_cached(struct event_base *base,structtimeval *tv_out);獲得目前正在執行的callback函數執行的時間,如果沒有正在執行的函數,則傳回目前時間。
9、 void event_base_dump_events(struct event_base *base, FILE *f);列出f在base中注冊的所有的事件即狀态。
10、 libevent可以監聽的事件有
1) 對一個檔案描述符的讀或寫
2) 對一個檔案描述符正變成讀或寫(隻針對邊緣觸發的IO)
3) 時間逾時
4) 一個信号發生
5) 使用者觸發事件
11、 事件對應的接口為:
#defineEV_TIMEOUT 0x01
#defineEV_READ 0x02
#defineEV_WRITE 0x04
#defineEV_SIGNAL 0x08
#defineEV_PERSIST 0x10
#defineEV_ET 0x20
12、 回調函數的接口:typedef void (*event_callback_fn)(evutil_socket_t, short, void *);第一個參數為事件發生在那個檔案描述符上,第二個參數描述了具體那個事件,第三個參數是使用者傳進來的參數。
13、 struct event *event_new(structevent_base *base, evutil_socket_t fd, short what, event_callback_fn cb, void*arg);初使化一個event,使其指定到一個base,fd為監聽的描述符,what是對那些事件進行監聽,回調函數有回調函數的參數
14、 int event_add(struct event *ev,const struct timeval *tv);這個函數是将event pending到base上,隻有經過pending的event才會被監控,如果enent初使化為EV_PERSIST則pending永遠有效,否則callback func被調用後就失效了,要想再生效則需要重新pending,如果設定了tv,則過去tv個時間後将觸發逾時事件。
15、 int event_del(struct event*ev);可以将已經pending的enent删除
16、 int event_assign(struct event*event, struct event_base *base, evutil_socket_t fd, short what, void(*callback)(evutil_socket_t, short, void *), void *arg);為了消除版本的差異實作這個函數,所有的都跟event_new一樣,隻是多了一個event參數,并且要求event沒有被初使化過。
17、 int event_priority_set(structevent *event, int priority);可以改變event的優先級,改變回調函數的執行順序,priority值的範圍為從0到base的priority的值減1,值越小越優先。當有多個priority被設定時,先運作有高優先級的事件,運作完成後再檢查有沒有高優先級的事件,如果沒有才運作低優先級的事件。通過event_base_priority_init(base, 2);設定base的優先級。
18、evutil_socket_t,大部分的作業系統上socket為一個int型,而在windows中為SOCKET類型,為了系統相容我們定義了此類型如下:
#ifdefWIN32
#defineevutil_socket_t intptr_t
#else
#defineevutil_socket_t int
#endif