03 Principais funções de comunicação em libevent

03 Principais funções de comunicação em libevent

以下是关于libevent学习的相关文章:
01 Baixe e instale a biblioteca libevent e teste se a instalação foi bem-sucedida
02 A ideia geral do framework da biblioteca libevent
03 A principal função de comunicação em
libevent 04 O fifo na biblioteca libevent é usado como um soquete de comunicação
05 A interpretação de pendentes e não pendentes na biblioteca libevent
06 Bufferevent buffering na comunicação em libevent Introdução aos recursos da área
07libevent library funções relacionadas a eventos
bufferevent 08libevent servidor de comunicação da biblioteca e funções principais do cliente
09libevent library server e cliente processo de comunicação TCP e exemplos de código

As funções a seguir são explicadas na ordem do quadro.

1 Função principal e descrição do parâmetro
1) Criar um event_base

// 创建event_base
struct event_base* event_base_new(void)

2) Crie um evento comum

// 创建新事件
	struct event *event_new(
		struct event_base *base, //上面创建的base
		evutil_socket_t fd, 	 // 绑定到event上的文件描述符 - int  **底层是对epollin与epollout的封装**
		short what, 			 //对应的监听事件(看下面的宏)
		event_callback_fn cb, 	 // 触发该事件后的处理回调函数
		void *arg 			   	 //回调函数的参数
);

//	short what
	#define  EV_TIMEOUT         0x01    // 已淘汰(忽略)
	#define  EV_READ            0x02
	#define  EV_WRITE           0x04
	#define  EV_SIGNAL          0x08    //libevent封装了信号相关的操作 SIGNAL
	#define  EV_PERSIST         0x10    // 持续触发,结合event_base_dispatch()函数使用,只有设置了该宏,在event_base_dispatch才能持续监听该事件。例如监听读事件,不设置的话只会出发一次读事件。
	#define  EV_ET              0x20    // 边沿模式

3) Adicionar eventos à base; qualquer evento precisa ser adicionado à base, caso contrário, o evento é inválido.
Aqui estão explicações adicionais: event_add () significa: eventos não pendentes -> eventos pendentes. Ou seja, ele deixa de ser não qualificado para ser possível, e vou escrever uma explicação do conceito pendente mais tarde.

	int event_add(
				struct event *ev, 		//event_new()返回的对象
				const struct timeval *tv	//时间{s,us},设置后时间,经过该时间后,事件没有被触发,但该事件的回调函数仍会被调用。
	//返回值:成功返回0;失败返回-1
				); 

4) Remova um evento da base e observe que ele não é excluído, mas o seguinte event_free () é excluído.
Correspondendo ao acima, aqui não está resolvido -> não pendente. Ou seja, do possível ao impossível.

		int event_del(struct event *ev); 
//成功时函数返回 0,失败时返回-1。

5) Função de monitoramento de loop de evento 1.

int event_base_dispatch(struct event_base* base);
	// event_base_dispatch(简化版event_base_loop(),等同于没有设置标志的 event_base_loop ( ))
	//该函数将一直运行,直到没有已经注册的事件了,或者调用 了event_base_loopbreak()或者 event_base_loopexit()为止

6) Função de monitoramento de loop de evento 2.

	int event_base_loop(struct event_base *base, int flags);
//正常退出返回0, 失败返回-1

//flages
#define EVLOOP_ONCE                        0x01
		//事件只会被触发一次,且事件没有被触发, 阻塞等待

#define EVLOOP_NONBLOCK                    0x02
		//非阻塞,等方式去做事件检测,不关心事件是否被触发了
#define EVLOOP_NO_EXIT_ON_EMPTY  		   0x04
		//没有事件的时候, 也不退出轮询检测

7) O loop de evento sai da função 1.

	 int event_base_loopexit(
				struct event_base *base,
				const struct timeval *tv
				);
	//如果 event_base 当前正在执行激活事件的回调 ,它将在执行完当前正在处理的事件后立即退出,参数2是指定的退出时间。

	struct timeval {
    
    
			   long   tv_sec;                    
			   long   tv_usec;            
			};
	//参数struct timeval *tv

8) O loop de evento sai da função 2.

		 int event_base_loopbreak(struct event_base *base);
		 //让event_base 立即退出循环
		//返回值: 成功 0, 失败 -1

9) Exclua ou destrua um evento.

void event_free(struct event *ev); 

10) Destrua a base do chefe do incidente.

void event_base_free(struct event_base* base);

Acho que você gosta

Origin blog.csdn.net/weixin_44517656/article/details/108742534
Recomendado
Clasificación