天天看點

libevent基礎函數整理

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沒有被初使化過。

libevent基礎函數整理

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

繼續閱讀