怎么快速学习开源库比如libevent? libevent分析 - sparkliang的专栏 - 博客频道 - CSDN.NET Libevent源码分析 - luotuo44的专栏 - 博客频道 - CSDN.NET 专栏:Libevent源码分析 wangafu.net/~nickm/libevent-book/ 是最快的…
min_heap类型定义min_heap函数构造/析构函数及初始化判断event是否在堆顶判断两个event之间超时结构体的大小关系判断堆是否为空及堆大小返回堆顶event分配堆空间堆元素的上浮堆元素的下沉堆插入元素堆删除元素弹出堆顶元素以下源码均基于libevent-2.0.21-stable.       在libevent中,使用min_heap这一数据结构来管理各个event的超时,也就是小顶堆,整个堆是根据各个event的超时时间来构成的,因此堆顶肯定就对应超时时间最小的event,这…
目录event_signal_map结构体向event_signal_map中添加event激活event_signal_map中的event删除event_signal_map中的event以下源码均基于libevent-2.0.21-stable.       在前文中分析了event_io_map,在windows环境下event_io_map定义为哈希表结构,而在非windows环境下event_io_map则定义为event_signal_map,先来看看event_signal_ma…
目录在event之前需要知道的event_baseevent结构体创建/注册一个event向event_base中添加一个event设置event的优先级激活一个event删除一个event获取指定event的状态纯超时event以下源码均基于libevent-2.0.21-stable.       有了event_base作为Reactor事件处理模型的基础,接着就还需要有event.event顾名思义,就是指的一个事件,将event与event_base组合起来,就能构建起整个事件处理的框…
目录min_heap的定义向min_heap中添加eventmin_heap中event的激活以下源码均基于libevent-2.0.21-stable.       在前文中,分析了小顶堆min_heap这一数据结构,并提到了Libevent就是利用min_heap来实现定时器的,接下来就分析一下min_heap是如何实现定时器的.       对于每一个需要监听的event,它都对应一个感兴趣的事件,当感兴趣的事件发生时,这个event就激活了.而实际上,往往都需要设置一个超时结构体time…
目录前言创建默认的event_baseevent_base的配置event_config结构体创建自定义event_base--event_base_new_with_config禁用(避免使用)某一种IO复用模型设置IO复用模型需要满足的特征设置event_base的flag特性获取event_base所满足的特征获取当前系统所支持的IO复用模型总结以下源码均基于libevent-2.0.21-stable.前言       要实现libevent的事件处理,最关键的就是event_base,…
目录 内存管理函数 函数声明 event-config.h 函数定义 event_mm_malloc_ event_mm_calloc_ event_mm_strdup_ event_mm_realloc_ event_mm_free_ event_set_mem_functions设置自定义内存管理函数 内存管理流程 以下源码均基于libevent-2.0.21-stable. 内存管理函数 函数声明 libevent的内存管理函数不是很多也不复杂,函数的声明放在mm-internal.h下面…
目录 错误处理函数 函数声明 __attribute__指令 函数定义 可变参数宏 _warn_helper函数 日志处理 event_log日志处理入口 日志处理回调函数指针log_fn 设置日志处理回调函数event_set_log_callback 错误处理 event_exit错误处理入口 错误处理回调函数指针fatal_fn 设置错误处理回调函数event_set_fatal_callback 日志及错误处理流程 以下源码均基于libevent-2.0.21-stable. 日志及错误…
event_io_map 哈希表操作函数 hashcode与equals函数 哈希表初始化 哈希表元素查找 哈希表扩容 哈希表元素插入 哈希表元素替换 哈希表元素删除 自定义条件删除元素 哈希表第一个非空元素 哈希表下一个元素 释放哈希表 向event_io_map中添加event 激活event_io_map中的event 删除event_io_map中的event 以下源码均基于libevent-2.0.21-stable. 在libevent中,自定义了一个哈希表结构用于实现event_i…
目录 前言 结点定义 链表初始化 链表查询及遍历 链表查询 链表遍历 插入结点 头插法 尾插法 前插法 后插法 删除结点 替换结点 总结 前言 在libevent中使用到了TAILQ数据结构,看了一下其他资料,发现TAILQ这一数据结构不仅仅用于libevent中,在很多其他地方像linux内核中也有使用.它的内部实际上就是一个双向链表,可以实现结点的插入(头插.尾插.指定位置插入).删除.替换和遍历等功能,不过所有功能都是通过宏函数来实现的,有的地方还是比较难以理解的,下面就来分析一下这一数据…