转载请注明出处: http://blog.csdn.net/luotuo44/article/details/38300779

我所分析的Libevent版本是2.0.21版本,是目前最新的稳定版本。看这系列博文中,需要读者有Linux编程的一些基础。因为像POSIX、文件描述符、多线程等等这些概念,我并不会去解释,我默认读者已经熟悉这些概念了。如果读者读过《UNIX环境高级编程》,那就完全没问题了。

因为Libevent是跨平台的,所以它使用了很多它自己定义的通用跨平台类型,比如evutil_socket_t。此外,Libevent也定义了一些跨平台通用的API,这些都可以在《通用类型和函数》一文中找到。

相信来看本系列的文章的读者,都不会是刚刚接触Libevent的用户。这里就不说Libevent的优点和怎么安装使用Libevent了。我是想介绍其他东西。

Source Insight:

这个工具是阅读代码的神器。下面是一个截图。

正中央是代码窗口。在代码中,如果你想看一下event_assign函数的内部是怎么实现的,那么你不用找到event_assign函数实现文件,然后打开,再Ctrl + F查找。在Source Insight中,你只需用鼠标单击一下event_assign函数。那么就会在下面的那个窗口显示event_assign函数的具体实现。是不是很厉害的功能?

右边的窗口是文件列表,和其他IDE的功能差不多。

左边那个窗口功能也是很强大的,特殊是当代码中出现了很多条件宏。在这样的条件下,这个宏会被定义成这样。在那样的条件下,又会定义成那样。左边的窗口可以清楚地看到。

Doxgen工具:

这是一个可以制作chm文件的工具。

在Source Insight中,虽然是很容易追踪到某个函数的具体实现(实现都在c文件中,非头文件)。但Libevent的源文件中很少有注释,也没有这个函数的解释。而且Source Insight无法追踪到函数的声明,只能追踪到定义(就是函数的实现)(或许是我对Source Insight还不熟悉,如果有这样的功能,还望大家指出)。

而由Doxgen工具生成的chm文件是离线把的帮助文档,它会列出函数的说明、参数和返回值。

怎么用Doxgen工具制作Libevent的离线版帮助文档,可以参考http://blog.chinaunix.net/uid-12773189-id-3022656.html

do{}while(0)宏:

在Libevent的源代码中,经常能看到do{}while(0)宏的使用。如果是第一次碰到这种写法,估计都会比较不解。可以参考http://www.cnblogs.com/lanxuezaipiao/p/3535674.html来解惑。

函数调用关系图:

有时候追踪一个函数,想知道该函数的调用关系图。有一个网站提供了这个关系图。下面举两个例子。

图中,上面的是event_free函数会调用哪些函数,一颗主调用树。下面的是哪些函数会调用event_free函数,是被调用关系。其中test_event_pending这些是Libevent提供的测试例子的测试函数。下面再给另外一个被调用关系的图:

有一个不足之处,这个网站并没有和Libevent同步更新,目前提供的最高Libevent版本是2.0.3-alpha

Libevent源码分析-----开篇相关推荐

  1. Libevent源码分析-----配置event_base

     出处:  http://blog.csdn.net/luotuo44/article/details/38443569 前面的博文都是讲一些Libevent的一些辅助结构,现在来讲一下关键结构体 ...

  2. Libevent源码分析-----TAILQ_QUEUE队列

     出处:  http://blog.csdn.net/luotuo44/article/details/38374009 Libevent源码中有一个queue.h文件,位于compat/sys目 ...

  3. Android 8.0系统源码分析--开篇

    个人分类: Android框架总结Android源码解析android framework 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sinat ...

  4. Mybatis源码分析开篇

    Mybatis的由来 iBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为M ...

  5. libevent 源码分析丨libevent组件构成以及编程要领

    1,前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少.写这一系列文章的用意在于,一则分享心得:二则对libevent代码和设计思想做系统的.更深层次的分析, ...

  6. Libevent源码分析-----连接监听器evconnlistener

    出处:http://blog.csdn.net/luotuo44/article/details/38800363 使用evconnlistener: 基于event和event_base已经可以写一 ...

  7. NHibernate源码分析开篇

    为了让大家更好的了解NHibernate的功能和工作原理, 我们将对NHibernate的源代码进行全面的分析. 在此系列文章中, 我们做出以下约定: 为简化输入, 文中NHibernate均以NH代 ...

  8. libevent源码分析:eventop

    eventop:定义了event_base使用的后端IO复用的一个统一接口 1 /** Structure to define the backend of a given event_base. * ...

  9. Libevent源码分析

    http://blog.csdn.net/column/details/libevent-src.html?&page=2

  10. Thrift异步IO服务器源码分析

    http://yanyiwu.com/work/2014/12/06/thrift-tnonblockingserver-analysis.html 最近在使用 libevent 开发项目,想起之前写 ...

最新文章

  1. 推荐一款基于 SpringBoot 的接口快速开发框架
  2. python循环语句-python中的for循环语句怎么写
  3. 使用 Navicat Lite 连接 Oracle 数据库
  4. KNN-----Python程序学习(一)
  5. 中国大学MOOC 人工智能导论第七章测试
  6. vb.net 文本框为空提示,一键清空文本框所有内容
  7. linux location root访问文件夹404_如何使网站支持https访问?nginx配置https证书
  8. python元组求和_Python 列表和元组 - 学习笔记(持续更新)
  9. 1096: 字符逆序
  10. 2022年中国隐私计算行业研究报告
  11. mysql日志恢复的时间格式_mysql binlog 日志恢复数据
  12. Oracle 11g EM安全证书问题无法访问的解决办法
  13. JavaScript Date时间对象
  14. LTE物理层一些基本概念
  15. matlab条件统计个数,matlab计算条件概率
  16. Java女生后来_那些主动的女生后来怎么样了?
  17. 微信小程序实现圆形菜单弹出选中动画
  18. Jyutping(粵拼)詳細教程
  19. vins-fusion代码解读[五] imu在vins里的理解
  20. Hyperf权限管理组件hyperf-permission发布

热门文章

  1. KVM通过qemu实现USB重定向
  2. TOMCAT报错解决
  3. nginx 服务器重启命令,关闭(转)
  4. Android UI设计中一些不错的示例及第三方控件
  5. CAP:Alantany 谈 CAP
  6. keepalived实现双机互备
  7. 如何找到稳定的网站空间
  8. 设备参数—支持网络外部的通信
  9. 学习了1!+...10!
  10. How To Read C Declarations