一直就想用一下libevent库,直到今天才去码代码。用法在他的头文件里面写的很清楚,原理的话也不是很难,感谢作者做的工作!

今天做了几个探索:

  • 实现自定义事件类型的设置与触发
  • 尝试 setInterval 类似的功能
  • event loop 无限等待loop,直到手动关闭程序
#include <iostream>
#include <event2/event.h>
#include <event2/util.h>
#include <sys/time.h>
#include <time.h>
#include <signal.h>
using namespace std; #define MY_EVENT_TRAN 10000 //定义自己的事件 struct event_base *base; void test_cb(int sock,short event,void*args){
cout<<"sock"<<sock<<" "<<"event:"<<event<<endl;
cout<<*((string *)args)<<endl;
} void app_exit(int sock,short event,void*args){
cout<<"signal exit"<<endl;
event_base_loopexit(base,0);
} void self_event_cb(int sock,short event,void *args){
cout<<"sock"<<sock<<" "<<"event:"<<event<<endl;
cout<<((int*)args)[0]<<endl;
} int main()
{ base=event_base_new(); string msg="hello world";
struct timeval timeout;
timeout.tv_sec=10;
timeout.tv_usec=10; int *m=new int[1];
m[0]=10; //int m=10; !important 将这样定义的作为参数传给回调函数会报内存错误,传给回调的参数的内存必须是从heap上申请的。 struct event *my_event=event_new(base,-1,EV_PERSIST,test_cb,&msg);
struct event *my_event2=event_new(base,-1,EV_PERSIST,self_event_cb,m);
struct event *sig_event=event_new(base,SIGINT,EV_SIGNAL|EV_PERSIST,app_exit,0); evsignal_initialized(sig_event); event_add(my_event,NULL);
event_add(my_event2,&timeout);//每隔10010毫秒触发一次这个事件,event_del()可以删除该事件
event_add(sig_event,NULL);
event_active(my_event,MY_EVENT_TRAN,0);//activate self define event event_base_dispatch(base);
delete[]m;
event_free(my_event);
event_free(my_event2);
event_free(sig_event);
event_base_free(base);
return 0;
}

环境: libevent-2.0.22-stable ubuntu 16.4 gnome codeblocks

libevent 初试的更多相关文章

  1. Win7+VS2013初试Thrift

    win7环境下VS2013编译boost_1_58_0步骤: 官网下载boost_1_58_0(直接下载),解压 cmd窗口cd到boost_1_58_0,执行bootstrap.bat cmd窗口获 ...

  2. linux下libevent安装

    wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz tar –xzvf libevent-1.4.13-stable.tar.gz ...

  3. 总结libevent安装方法

    1.先用:ls -al /usr/lib | grep libevent  查看是否已安装,如果已安装且版本低于1.3,则先通过:rpm -e libevent -nodeps 进行卸载. 2.下载l ...

  4. 定时器管理:nginx的红黑树和libevent的堆

    libevent 发生超时后, while循环一次从堆顶del timer——直到最新调整的最小堆顶不是超时事件为止,(实际是del event),但是会稍后把这个timeout的 event放到ac ...

  5. [译]libev和libevent的设计差异

    本文译自what's the difference between libev and libevent? 作者是libev作者 [问]两个库都是为异步io调度而设计,在Linux上都是使用epoll ...

  6. Libevent的IO复用技术和定时事件原理

    Libevent 是一个用C语言编写的.轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相当精炼.易 ...

  7. Libevent初探

    Libevent 是一个用C语言编写的.轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相当精炼.易 ...

  8. PHP写的异步高并发服务器,基于libevent

    PHP写的异步高并发服务器,基于libevent 博客分类: PHP PHPFPSocketLinuxQQ  本文章于2013年11月修改. swoole已使用C重写作为PHP扩展来运行.项目地址:h ...

  9. libevent在windows平台下通过vs进行编译

    1.vs中新建一个静态库项目 2.配置头文件目录,将./compat../include../WIN32-Code三个目录添加到文件目录中 3.用记事本打开Makefile.nmake文件,可以看到里 ...

随机推荐

  1. psp开发------汉化插件

    近期略微研究了下psp汉化,写了个汉化插件,在这记录下.聊以慰藉. 传统的汉化流程找码表,字库,破解什么这里不多讲,网上有教程.以下说下一种另类汉化方法.特别对于难以破解字库的游戏,当然这样的方法也有 ...

  2. Unity NGUI 描点控件的位移动画

           要让一个描点的控件动画移动到一个Position,能够用TweenPosition.可是这个仅仅能用在Position是固定的情况下.并且不能依据分辨率适配来进行移动. 以NGUI自带的 ...

  3. 深入探讨this指针

    深入探讨this指针   为了写这篇文章,准备了好长时间,翻遍了箱底的书籍.可是如今还是不敢放开手来写,战战兢兢.不是操心自己写错,而是唯恐自己错误误导别人.同一时候也希望这篇文章能给你一点收获.既然 ...

  4. Android 滑动效果高级篇(八)—— 自定义控件

    自定义控件,较常用View.ViewGroup.Scroller三个类,其继承关系如下: 本示例自定义控件,实现一个Gallery效果,并添加了一个显示View个数和位置的bar条,效果图: 自定义控 ...

  5. 配置Log4j(非常具体)

    来自: http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记 ...

  6. MYSQL 备份工具

    backup of a database is a very important thing. If no backup, meet the following situation goes craz ...

  7. 操作cookie

    $.extend($, { setCookie: function(c_name, value, expiredays) { var exdate = new Date(); exdate.setDa ...

  8. DOM+Javascript一些实例

    1.内容+遮罩层+悬浮对话框 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  9. MYSQL基础笔记(七)- 数据类型二

    字符串类型 在SQL中,讲字符串类型分成了六类:char,varchar,text,blob,enum,set char,定长字符串 磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度. ...

  10. 包加载失败 未能正确加载包“xxx”...

    打开vs2008或者2005如果弹出一个警告对话框 包加载失败 未能正确加载包“xxx” ...... 的字样,就可以用以下方法解决. 在cmd下运行带参数的devenv.exe: "d(盘 ...