[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():

 [libevent]事件流程大览_第1张图片

 

event_set()就是单纯的设置成员而已。

 

event_add()

 [libevent]事件流程大览_第2张图片

 

event_dispatch()

 [libevent]事件流程大览_第3张图片

 

列出了一些主要的函数,接下来的几篇就是对函数的分析了,一句一句~


你可能感兴趣的:(libevent源码分析)