數據結構:html
struct uloop_fd { uloop_fd_handler cb; int fd; bool eof; bool error; bool registered; uint8_t flags; }; struct uloop_timeout { struct list_head list; bool pending; uloop_timeout_handler cb; struct timeval time; }; struct uloop_process { struct list_head list; bool pending; uloop_process_handler cb; pid_t pid; };
事件回調函數:linux
typedef void (*uloop_fd_handler)(struct uloop_fd *u, unsigned int events) // 描述符 typedef void (*uloop_timeout_handler)(struct uloop_timeout *t) // 定時器 typedef void (*uloop_process_handler)(struct uloop_process *c, int ret) // 進程
事件標誌:數據結構
#define ULOOP_READ (1 << 0) #define ULOOP_WRITE (1 << 1) #define ULOOP_EDGE_TRIGGER (1 << 2) #define ULOOP_BLOCKING (1 << 3) #define ULOOP_EVENT_MASK (ULOOP_READ | ULOOP_WRITE)
主框架:框架
/** * 初始化事件循環 */ int uloop_init(void) /** * 事件循環主處理入口 */ void uloop_run(void) /** * 銷燬事件循環 */ void uloop_done(void)
描述符事件:函數
/** * 註冊一個新描述符到事件處理循環 */ int uloop_fd_add(struct uloop_fd *sock, unsigned int flags) /** * 從事件處理循環中銷燬指定描述符 */ int uloop_fd_delete(struct uloop_fd *sock)
定時器事件:oop
/** * 註冊一個新定時器 */ int uloop_timeout_add(struct uloop_timeout *timeout) /** * 設置定時器超時時間(毫秒),並添加 */ int uloop_timeout_set(struct uloop_timeout *timeout, int msecs) /** * 銷燬指定定時器 */ int uloop_timeout_cancel(struct uloop_timeout *timeout) /** * 獲取定時器還剩多長時間超時 */ int uloop_timeout_remaining(struct uloop_timeout *timeout)
進程事件:ui
/** * 註冊新進程到事件處理循環 */ int uloop_process_add(struct uloop_process *p) /** * 從事件處理循環中銷燬指定進程 */ int uloop_process_delete(struct uloop_process *p)