今天開始学习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安装与简单演示样例的更多相关文章

  1. [hadoop系列]Pig的安装和简单演示样例

    inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yaho ...

  2. Thrift的安装和简单演示样例

    本文仅仅是简单的解说Thrift开源框架的安装和简单使用演示样例.对于具体的解说,后面在进行阐述. Thrift简述                                           ...

  3. RHEL5 X86-64上安装Oracle 11gR2演示样例与总结

    进入Oracle DBA行业也有好几年了,可是说到安装Oracle的经验,我还真不是特别多,印象中刚開始每次安装都有点磕磕碰碰,随着接触Oracle的时间越来越长,各方面的原理.机制也都有一定的了解后 ...

  4. 【传智播客】Libevent学习笔记(一):简介和安装

    目录 00. 目录 01. libevent简介 02. Libevent的好处 03. Libevent的安装和测试 04. Libevent成功案例 00. 目录 @ 01. libevent简介 ...

  5. MongoDB 学习笔记(一):安装及简单shell操作

    一.说明 1.该系列MongoDB学习笔记的学习环境采用的MongoDB版本为mongodb-win32-i386-2.4.6,操作系统为win7. 二.安装 1.新建两个目录,分别是D:\Insta ...

  6. 在VC6.0中多线程编程演示样例(带同步信号量)

    直接上代码: #include <windows.h>//必要的头文件,使用Windows API函数 #include <stdio.h> int index = 0; in ...

  7. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  8. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  9. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

随机推荐

  1. 高德,百度,Google地图定位偏移以及坐标系转换

    一.在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系 一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的 ...

  2. js将字符串中所有反斜杠\替换成正斜杠/

    区分正斜杠与反斜杠: 正斜杠:http://.http紧跟着的斜杠,离手输入最近的斜杠,shift中间斜杠.45度角斜杠.正斜杠不需要转义 反斜杠:回车与空格之间.程序表示时需要转义成\\. str. ...

  3. Java 集合 ArrayList 需要知道的几个问题

    问:Arraylist 的动态扩容机制是如何自动增加的?简单说说你理解的流程? 答:当在 ArrayList 中增加一个对象时 Java 会去检查 Arraylist 以确保已存在的数组中有足够的容量 ...

  4. 51nod1446 Kirchhoff矩阵+Gauss消元+容斥+折半DFS

    思路: //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using ...

  5. ACM_三元一次函数解法(克莱姆法则)

    三元一次函数 Time Limit: 2000/1000ms (Java/Others) Problem Description: 计算三元一次函数..如图 Input: EOF,先输入n,表示样例个 ...

  6. python中的深拷贝和浅拷贝(面试题二)

    一.浅拷贝 定义:浅拷贝只是对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值. 浅拷贝的特点: 公用一个值: 这两个变量的内存地址一样: 对其中一个变量的值改变,另外一个变量的值也 ...

  7. IIS 503 错误

    今天早上乘公交的时候,网站运维群里直接炸了,网站打不开,503错误.然后就各种@我,吓得我手机都要扔了,然后马不停蹄的赶往公司去查看错误. 我首先在IIS上浏览网页,想试图在服务器上显现出详细错误,这 ...

  8. 为什么现在改用int.TryParse了

    以前一直用 int.Parse(x)或者 Convert.ToInt64(x),后来项目中发现如果x变量的值为null是,就报错了,哪怕我这样写 int.Parse(x=x??"0" ...

  9. 使用A*寻路小记

    前几天做另一个DEMO 要用实现自动寻路功能,看到普遍都是A* 学习了下 我的主循环代码: isFindEndPoint = false; //主循环 do { CreateOutSkirtsNode ...

  10. Java final和static 修饰符

    一.final final是不变的,最终的意思.可以用来修饰变量,方法,类. 1. 修饰变量 private final int a = 2; private final int b; // fina ...