Libevent 学习笔记 (1)——Libevent 2.0安装与简单演示样例
今天開始学习Libevent 。
Libevent 是开源社区的一款高性能I/O框架库。
主要特点有:
1 跨平台。
2 统一事件源
3 线程安全
4 基于Reactor
今天主要进行了Libevent的安装,以及利用libevent框架编写一个间隔1s打印 Hello Libevent!
信息的程序。
首先是安装:
1 下载libevent源代码,下载地址http://libevent.org/。我下载的版本号是2.0 stable版本号。下载的文件格式是tar.gz包
2 进入刚下载得到的tar.gz包的父母录,运行 tar -zxvf **.tar.gz。 解压得到一个文件夹,进入这个文件夹。
3 依次运行下列命令,就可以完毕安装
$ ./configure
$ make
$ make verify # (optional)
$ sudo make install
測试代码的流程是
创建Reactor实例(event_base) -》创建定时器的事件处理器-》将事件处理器增加注冊事件列表-》分发事件 -》释放系统资源。
代码例如以下:
#include <sys/signal.h>
#include <event.h>
struct event_base* base = NULL;
struct event* signal_event = NULL;
struct event* timeout_event = NULL;
timeval tv = {0,0};
void signal_cb (int fd, short event, void* argc)//信号回调函数
{
struct event_base* base = (event_base*) argc;//获取传递进来的Reactor对象
struct timeval delay = { 2,0};//设置延时结构体。延时时间2s
printf("Caught an interrupt signal; exciting cleanly in two seconds...\n");
event_base_loopexit (base,&delay);
}
void timeout_cb (int fd,short event, void* argc)
{
printf("Hello Libevent!\n");
event_add(timeout_event,&tv);
}
int main()
{
event_base* base = event_init();//生成Reactor实例
signal_event = evsignal_new(base,SIGINT,signal_cb,base);//生成SIGINT信号的事件处理器
event_add(signal_event,NULL);//将事件处理器增加到注冊事件队列
tv.tv_sec = 1;
tv.tv_usec = 0;
timeout_event = evtimer_new(base,timeout_cb,NULL);//生成定时器处理器
event_add(timeout_event,&tv);//将定时器处理器增加注冊事件队列
event_base_dispatch(base);//分发事件
event_free(timeout_event);
event_free(signal_event);
event_base_free(base);
}
~
程序运行结果截图
Libevent 学习笔记 (1)——Libevent 2.0安装与简单演示样例的更多相关文章
- [hadoop系列]Pig的安装和简单演示样例
inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yaho ...
- Thrift的安装和简单演示样例
本文仅仅是简单的解说Thrift开源框架的安装和简单使用演示样例.对于具体的解说,后面在进行阐述. Thrift简述 ...
- RHEL5 X86-64上安装Oracle 11gR2演示样例与总结
进入Oracle DBA行业也有好几年了,可是说到安装Oracle的经验,我还真不是特别多,印象中刚開始每次安装都有点磕磕碰碰,随着接触Oracle的时间越来越长,各方面的原理.机制也都有一定的了解后 ...
- 【传智播客】Libevent学习笔记(一):简介和安装
目录 00. 目录 01. libevent简介 02. Libevent的好处 03. Libevent的安装和测试 04. Libevent成功案例 00. 目录 @ 01. libevent简介 ...
- MongoDB 学习笔记(一):安装及简单shell操作
一.说明 1.该系列MongoDB学习笔记的学习环境采用的MongoDB版本为mongodb-win32-i386-2.4.6,操作系统为win7. 二.安装 1.新建两个目录,分别是D:\Insta ...
- 在VC6.0中多线程编程演示样例(带同步信号量)
直接上代码: #include <windows.h>//必要的头文件,使用Windows API函数 #include <stdio.h> int index = 0; in ...
- python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...
- Typescript 学习笔记一:介绍、安装、编译
前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...
随机推荐
- @RequestParam 和 @RequestBody 接受的时间格式
这两个接受的时间格式不相同 首先看一下他们的区别 @RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容.(Ht ...
- C++ 由虚基类 虚继承 虚函数 到 虚函数表
//虚基类:一个类可以在一个类族中既被用作虚基类,也被用作非虚基类. class Base1{ public: Base1(){cout<<"Construct Base1!&q ...
- 启用禁用USB接口
一个小工具,功能有启用禁用外网.USB接口,可由服务端socket长链接进行操控客户端从而达到实现前边的这些功能,这里贴上核心代码,先给上启用禁用USB接口吧,这个方法可随时启用禁用,之前用过一个改u ...
- Oracle12C用户创建、授权、登录
Oracle12C用户创建.授权.登录 1.以系统用户登录 C:\Users\LEI>sqlplus sys/dwh as sysdba; SQL*Plus: Release 12.1.0.2. ...
- python gdal 矢量转栅格
data = gdal.Open(templateTifFileName, gdalconst.GA_ReadOnly)geo_transform = data.GetGeoTransform()x_ ...
- html5——3D转换
角度旋转 rotateX:默认以center绕x轴旋转 rotateY:默认以center绕y轴旋转 rotateZ:默认以cente绕z轴r旋转 //rotateX原点为center==>正值 ...
- C# 学习——静态(第四天)
一.命名空间 类似于文件夹,而类就是文件夹中的文件: 作用:明确的指向我们所需要的类的 所在的位置: 统一命名空间下,类名不能重复. 二.类 概念:具有相同属性和功能的对象的抽象的集合. 三.静态与实 ...
- Nginx 重新加载日志配置
最近在写一个nginx日志的切割脚本,切割完后,发现可以不重启服务,而直接重新加载日志配置文件的命令 [ kill -USR1 $nginx.pid ],但是不知道 -USR1这个参数是什么意 ...
- (转)OL2中设置鼠标的样式
http://blog.csdn.net/gisshixisheng/article/details/49496289 概述: 在OL2中,鼠标默认是箭头,地图移动时,鼠标样式是移动样式:很多时候,为 ...
- android Adapter总结
1.连接视图与数据.数据封装: 2.视图构造与配置: 3.数据更新监听: 4.视图重用机制. * An Adapter object acts as a bridge between an {@lin ...