libevent 初试
一直就想用一下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 初试的更多相关文章
- Win7+VS2013初试Thrift
win7环境下VS2013编译boost_1_58_0步骤: 官网下载boost_1_58_0(直接下载),解压 cmd窗口cd到boost_1_58_0,执行bootstrap.bat cmd窗口获 ...
- linux下libevent安装
wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz tar –xzvf libevent-1.4.13-stable.tar.gz ...
- 总结libevent安装方法
1.先用:ls -al /usr/lib | grep libevent 查看是否已安装,如果已安装且版本低于1.3,则先通过:rpm -e libevent -nodeps 进行卸载. 2.下载l ...
- 定时器管理:nginx的红黑树和libevent的堆
libevent 发生超时后, while循环一次从堆顶del timer——直到最新调整的最小堆顶不是超时事件为止,(实际是del event),但是会稍后把这个timeout的 event放到ac ...
- [译]libev和libevent的设计差异
本文译自what's the difference between libev and libevent? 作者是libev作者 [问]两个库都是为异步io调度而设计,在Linux上都是使用epoll ...
- Libevent的IO复用技术和定时事件原理
Libevent 是一个用C语言编写的.轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相当精炼.易 ...
- Libevent初探
Libevent 是一个用C语言编写的.轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相当精炼.易 ...
- PHP写的异步高并发服务器,基于libevent
PHP写的异步高并发服务器,基于libevent 博客分类: PHP PHPFPSocketLinuxQQ 本文章于2013年11月修改. swoole已使用C重写作为PHP扩展来运行.项目地址:h ...
- libevent在windows平台下通过vs进行编译
1.vs中新建一个静态库项目 2.配置头文件目录,将./compat../include../WIN32-Code三个目录添加到文件目录中 3.用记事本打开Makefile.nmake文件,可以看到里 ...
随机推荐
- 迷途指针 new delete
编程中有一种很难发现的错误是迷途指针.迷途指针也叫悬浮指针.失控指针,是党对一个指针进行delete操作后——这样会释放它所指向的内存——并没有把它设置为空时产生的.而后,如果你没有重新赋值就试图再次 ...
- Windows下codeblocks的安装与配置
最近自己正好要使用codeblocks编写C++程序,安装好却发现无法编译,如果您也遇到相似问题,可以参考本文. 如果您已安装codeblocks,想转换成中文界面,直接参考Step 2. 如果您C程 ...
- 用CAS操作实现Go标准库中的Once
Go标准库中提供了Sync.Once来实现"只执行一次"的功能.学习了一下源代码,里面用的是经典的双重检查的模式: // Once is an object that will p ...
- yar
<?php class Operator { /** * 两数相加 */ public function add($a, $b) { return $this->_add($a, $b); ...
- 2014年GCT考试报名时
第一阶段: 网上报名时间预计为2014年6月20日至2014年7月10日. 考生可在6月20日后在中国学位与研究生教育信息网(http://www.chinadegrees.cn/)网站报名.网报时按 ...
- ASP.NET MVC 4 让数据库自动迁移
今天实际测试了下这个方法,可以保持数据库与实体类同步,同时不会出现数据库迁移的提示.但是只能更改实体类来改变数据库,而不能改数据库来改变实体类.所以这才是Code frist,如果通过改数据库表来改动 ...
- 分享一个java线程专栏
专栏 : java线程基础 转载自 http://blog.csdn.net/column/details/yinwenjiethread.html 专栏内容: 1.线程基础:线程(1)--操作系统和 ...
- linux高可用集群(HA)原理详解(转载)
一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个 节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用 ...
- 关于Java中的构造方法和set方法()给属性赋值
对于一个类中的成员变量(属性),属性如果都设置成了private类型,那么对外给属性设置了get和set方法 , 那么外部程序中给这些属性设置值,有两种方式. 第一种就是通过set()方法. 第二种就 ...
- 【阔别许久的博】【我要开始攻数学和几何啦】【高精度取模+同余模定理,*】POJ 2365 The Embarrassed Cryptographer
题意:给出一大数K(4 <= K <= 10^100)与一整数L(2 <= L <= 106),K为两个素数的乘积(The cryptographic keys are cre ...