[db:标题]
摘要:libevent的使用 8-1 安装 自己百度一下,安装它不是特别难,加油!!! 8-2 libevent介绍 它是一个开源库,用于处理网络和定时器等等事件。它提供了跨平台的API,能够在不同的操作系统上实现高性能,可扩展的世界去的
libevent的使用
8-1 安装
自己百度一下,安装它不是特别难,加油!!!
8-2 libevent介绍
它是一个开源库,用于处理网络和定时器等等事件。它提供了跨平台的API,能够在不同的操作系统上实现高性能,可扩展的世界去的编程。
1.事件驱动:libevent使用事件驱动模型,通过监听事件的就绪状态来触发相应的回调函数。(事件:网络I/O,信号,定时器等等)。
2.跨平台:libevent可以在Linux,Unix,Windows等系统上使用。
3.高性能:libevent底层采用epoll等等实现。并且采用非阻塞I/O技术,实现高效的事件处理。可以处理大量的并发连接和高负载情况。
4.线程安全:libevent提供了安全的api,可以在多线程下使用。不同线程共享一个event_base对象,并且独立地注册和处理事件,保证线程之间的数据安全。
5.定时器支持:libevent提供了定时器功能,可以注册和管理不同的定时器。程序员可以根据指定的定时器的触发时间来实现定时任务的调度和执行。
6.异步DNS解析:可以在不阻塞主程序的情况下进行域名查询操作。
7.可扩展性:允许程序员编写自定义的事件处理机制和回调函数。
总之它很厉害。
8-3 libevent库的使用
首先在程序中包含头文件 #include <event2/event.h>
之后在使用gcc编译的时候要指定一个库 -levent 例如:gcc -o main main.c -levent
8-4 libevent的地基-event_base
在使用libevent前,需要分配一个或者多个event_base结构体,每个结构体都有一个事件集合,可以检测那个事件是激活的。event_base结构体相当于epoll的红黑树根节点,每个结构体都有一种用于检测某种事件已经就绪的方法。
8-4-1创建结构体event_base函数
函数原型:struct event_base *event_base_new(void);
函数功能:创建一个event_base对象,用于管理事件循环,事件注册和分发等。
函数参数:无。
函数返回值:
成功:返回一个event_base类型的结构体指针。
失败:返回NILL。
例子:struct event_base *base = event_base_new(); //创建一个结构体,并且指针base指向那个结构体。
8-4-2释放结构体event_base_free函数
函数原型:void event_base_free(struct event_base * base);
函数功能:释放一个event_base对象,创建完event_base对象后,如果不用了记得释放掉。
函数参数:一个指向event_base对象的结构体指针。
函数返回值:无。
8-4-3重置结构体event_base函数
函数原型:int event_reinit(struct event_base *base);
函数功能:重置原来的event_base对象
函数参数:一个指向event_base对象的结构体指针。
函数返回值:
成功:返回0。
失败:返回-1。
8-5查看libevent支持那些I/O复用
8-5-1获取当前平台支持的I/O复用方式函数
函数原型:const char **event_get_supported_methods(void);
函数功能:获取当前平台支持的I/O复用方法。
函数参数:无。
函数返回值:返回一个二维数组,将其打印即可得到支持的复用方式。
8-5-2获取当前event_base对象使用的I/O复用方式
函数原型:const char *event_base_get_method(const struct event_base *base);
函数功能:获取当前event_base对象使用的I/O复用方法。
函数参数:一个指向event_base对象的结构体指针。
