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文件,可以看到里 ... 
随机推荐
- iOS开发——UI篇OC篇&初始化图片方式
			初始化图片方式 一.读取图片 1.从资源(resource)读取 [cpp] view plaincopyprint? UIImage* image=[UIImage imageNamed:@&q ... 
- 网络IPC:套接字之套接字描述符
			套接字是通信端点的抽象.与应用程序要使用文件描述符访问文件一样,访问套接字也需要套接字描述符.套接字描述符在UNIX系统是用文件描述符实现的.事实上,许多处理文件描述符的函数(如read和write) ... 
- LeetCode: Populating Next Right Pointer in Each Node
			LeetCode: Populating Next Right Pointer in Each Node Given a binary tree struct TreeLinkNode { TreeL ... 
- 今天分享一个抽奖的类Lottery
			/* * Copyright (C) 2014 Jason Fang ( ijasonfang@gmail.com ) * * Licensed under the Apache License, V ... 
- scala Option 里的 orNull orElse getOrElse 区别和使用
			Scala Option Scala Option类型用来表示一个值是可选的(有值或无值) Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some ... 
- 使用cocos2d-x制作 Texture unpacker
			使用cocos2d-x制作 Texture unpacker 没错,就是unpacker. 在大多数游戏包里面,可以找到很多纹理图集,他们基本上是用texture packer制作的,有plist文件 ... 
- oracle函数、包、变量的定义和使用、重点”结构体和数组”
			函数 实例1:输入雇员的姓名,返回该雇员的年薪 create function fun1(spName varchar2) ,); begin +nvl(comm,) into yearSal fro ... 
- SRM 584 第一次玩TopCoder。。。只水题一道。。。
			第一次topcoder,以前老感觉没有资格去做tc,cf什么的,现在已经慢慢接触了. 感觉还可以,还是有让我们这些蒻菜安慰的水题. tc的确很好玩,用客户端比赛,还有各种规则,而且还是只编写一个类提交 ... 
- Uva120  Stacks of Flapjacks 翻煎饼
			水水题.给出煎饼数列, 一次只能让第一个到第i个数列全部反转,要求把数列排序为升序. 算法点破后不值几钱... 只要想办法把最大的煎饼放到最后一个,然后就变成前面那些煎饼的数列的子题目了.递归或循环即 ... 
- 标签切换JS代码
			//标签切换 var nav = $('.index-nav'); var content = $('.index-nav-content li'); function hoverNav ($eleA ... 
