1. 程式人生 > >[libevent]事件流程大覽

[libevent]事件流程大覽

我 們可以從sample的資料夾裡面找到以下檔案程式碼:

int called = 0;

static void
signal_cb(int fd, short event, void *arg)
{
	struct event *signal = arg;

	printf("%s: got signal %d\n", __func__, EVENT_SIGNAL(signal));

	if (called >= 2)
		event_del(signal);
	
	called++;
}

int
main (int argc, char **argv)
{
	struct event signal_int;
 
	/* Initalize the event library */
	event_init();

	/* Initalize one event */
	event_set(&signal_int, SIGINT, EV_SIGNAL|EV_PERSIST, signal_cb,
	    &signal_int);

	event_add(&signal_int, NULL);

	event_dispatch();

	return (0);
}

第一步:event_init()實際上是相當於呼叫了event_base_new()建立了一個event_base物件

第二步:event_set()設定eventsignal_int)的成員

第三步:event_add()相當於註冊事件吧

第四步:迴圈

接下來我們來整理一下程式的執行過程,不斷深入。

首先是event_init():

 

event_set()就是單純的設定成員而已。

event_add()

 

event_dispatch()

 

列出了一些主要的函式,接下來的幾篇就是對函式的分析了,一句一句~