- 浏览: 1386361 次
- 性别:
- 来自: 火星
文章分类
最新评论
-
aidd:
内核处理time_wait状态详解 -
ahtest:
赞一下~~
一个简单的ruby Metaprogram的例子 -
itiProCareer:
简直胡说八道,误人子弟啊。。。。谁告诉你 Ruby 1.9 ...
ruby中的类变量与类实例变量 -
dear531:
还得补充一句,惊群了之后,数据打印显示,只有一个子线程继续接受 ...
linux已经不存在惊群现象 -
dear531:
我用select试验了,用的ubuntu12.10,内核3.5 ...
linux已经不存在惊群现象
更详细的用法请看他的文档:
http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod
这两个函数都是默认初始化一个loop,区别是第一个不是线程安全的,第二个不能捕捉信号和子进程的watcher。
参数flags可以为下面几种类型:
这两个函数就是当你在子进程里需要使用libev的函数的之前必须要调用。他们的区别是第二个函数是当使用ev_loop_new创建的loop时,才用第二个函数,也就是说重用父进程创建的loop。
开始事件循环。
初始化一个watcher。TYPE也就是libev支持的事件类型,比如io,比如time等等。。
第一个参数为一个watcher,第二个回调函数,第三个句柄,第四个事件类型。包含下面几种:
启动一个watcher。
例子:
http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod
struct ev_loop *ev_default_loop (unsigned int flags) struct ev_loop *ev_loop_new (unsigned int flags)
这两个函数都是默认初始化一个loop,区别是第一个不是线程安全的,第二个不能捕捉信号和子进程的watcher。
参数flags可以为下面几种类型:
引用
#define EVFLAG_AUTO 0x00000000U /* not quite a mask */
/* flag bits */
#define EVFLAG_NOENV 0x01000000U /* do NOT consult environment */
#define EVFLAG_FORKCHECK 0x02000000U /* check for a fork in each iteration */
/* method bits to be ored together */
#define EVBACKEND_SELECT 0x00000001U /* about anywhere */
#define EVBACKEND_POLL 0x00000002U /* !win */
#define EVBACKEND_EPOLL 0x00000004U /* linux */
#define EVBACKEND_KQUEUE 0x00000008U /* bsd */
#define EVBACKEND_DEVPOLL 0x00000010U /* solaris 8 */ /* NYI */
#define EVBACKEND_PORT 0x00000020U /* solaris 10 */
/* flag bits */
#define EVFLAG_NOENV 0x01000000U /* do NOT consult environment */
#define EVFLAG_FORKCHECK 0x02000000U /* check for a fork in each iteration */
/* method bits to be ored together */
#define EVBACKEND_SELECT 0x00000001U /* about anywhere */
#define EVBACKEND_POLL 0x00000002U /* !win */
#define EVBACKEND_EPOLL 0x00000004U /* linux */
#define EVBACKEND_KQUEUE 0x00000008U /* bsd */
#define EVBACKEND_DEVPOLL 0x00000010U /* solaris 8 */ /* NYI */
#define EVBACKEND_PORT 0x00000020U /* solaris 10 */
ev_default_fork () ev_loop_fork (loop)
这两个函数就是当你在子进程里需要使用libev的函数的之前必须要调用。他们的区别是第二个函数是当使用ev_loop_new创建的loop时,才用第二个函数,也就是说重用父进程创建的loop。
ev_loop (loop, int flags)
开始事件循环。
ev_TYPE_init (ev_TYPE *watcher, callback, [args])
初始化一个watcher。TYPE也就是libev支持的事件类型,比如io,比如time等等。。
第一个参数为一个watcher,第二个回调函数,第三个句柄,第四个事件类型。包含下面几种:
引用
#define EV_UNDEF -1 /* guaranteed to be invalid */
#define EV_NONE 0x00 /* no events */
#define EV_READ 0x01 /* ev_io detected read will not block */
#define EV_WRITE 0x02 /* ev_io detected write will not block */
#define EV_IOFDSET 0x80 /* internal use only */
#define EV_TIMEOUT 0x00000100 /* timer timed out */
#define EV_PERIODIC 0x00000200 /* periodic timer timed out */
#define EV_SIGNAL 0x00000400 /* signal was received */
#define EV_CHILD 0x00000800 /* child/pid had status change */
#define EV_STAT 0x00001000 /* stat data changed */
#define EV_IDLE 0x00002000 /* event loop is idling */
#define EV_PREPARE 0x00004000 /* event loop about to poll */
#define EV_CHECK 0x00008000 /* event loop finished poll */
#define EV_EMBED 0x00010000 /* embedded event loop needs sweep */
#define EV_FORK 0x00020000 /* event loop resumed in child */
#define EV_ASYNC 0x00040000 /* async intra-loop signal */
#define EV_ERROR 0x80000000 /* sent when an error occurs */
#define EV_NONE 0x00 /* no events */
#define EV_READ 0x01 /* ev_io detected read will not block */
#define EV_WRITE 0x02 /* ev_io detected write will not block */
#define EV_IOFDSET 0x80 /* internal use only */
#define EV_TIMEOUT 0x00000100 /* timer timed out */
#define EV_PERIODIC 0x00000200 /* periodic timer timed out */
#define EV_SIGNAL 0x00000400 /* signal was received */
#define EV_CHILD 0x00000800 /* child/pid had status change */
#define EV_STAT 0x00001000 /* stat data changed */
#define EV_IDLE 0x00002000 /* event loop is idling */
#define EV_PREPARE 0x00004000 /* event loop about to poll */
#define EV_CHECK 0x00008000 /* event loop finished poll */
#define EV_EMBED 0x00010000 /* embedded event loop needs sweep */
#define EV_FORK 0x00020000 /* event loop resumed in child */
#define EV_ASYNC 0x00040000 /* async intra-loop signal */
#define EV_ERROR 0x80000000 /* sent when an error occurs */
引用
ev_TYPE_start (loop *, ev_TYPE *watcher)
启动一个watcher。
例子:
#include <ev.h> #include <stdio.h> //不同的watcher ev_io stdin_watcher; ev_timer timeout_watcher; ev_timer timeout_watcher_child; //标准输入的回调函数 static void stdin_cb (EV_P_ ev_io *w, int revents) { puts ("stdin ready"); ev_io_stop (EV_A_ w); ev_unloop (EV_A_ EVUNLOOP_ALL); } //父进程的定时器回调函数 static void timeout_cb (EV_P_ ev_timer *w, int revents) { puts ("timeout"); ev_unloop (EV_A_ EVUNLOOP_ONE); } //子进程的定时器回调函数 static void timeout_cb_child (EV_P_ ev_timer *w, int revents) { puts ("child timeout"); ev_unloop (EV_A_ EVUNLOOP_ONE); } int main (void) { //创建一个backend为select的loop struct ev_loop *loop = ev_loop_new(EVBACKEND_SELECT); //初始化并启动父进程的watcher ev_timer_init(&timeout_watcher, timeout_cb, 10, 0.); ev_timer_start(loop, &timeout_watcher); switch (fork()) { case -1: return -1; case 0: //使用父进程loop。 ev_loop_fork(loop); //子进程的loop struct ev_loop *loop_child = ev_loop_new (EVBACKEND_SELECT); ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ); ev_io_start (loop, &stdin_watcher); ev_timer_init(&timeout_watcher_child, timeout_cb_child, 5.5, 0.); ev_timer_start(loop_child, &timeout_watcher_child); ev_loop(loop_child,0); } //等待事件 ev_loop (loop, 0); return 0; }
发表评论
-
gcc的几个自动优化
2009-11-10 00:44 5082我的gcc版本是4.4.1 先来看const和define以 ... -
gdb学习笔记(一)
2009-10-17 14:11 11662这里只是一个摘要。具体的细节还需要去看manual。 1 ... -
ydb的内存模型
2009-09-06 18:02 1901阿宝同学推荐了这个东 ... -
glibc中strlen的实现
2009-08-04 09:10 4479glibc中的strlen的实现主要的思想就是每次检测4个字节 ... -
libevent源码浅析(四)
2009-05-15 23:02 4379最近刚刚一个项目自己用libevent,因此这几天又把libe ... -
libevent源码浅析(三)
2009-03-17 00:08 4509这次我们来看libevent的信号的处理。 在libeven ... -
libevent源码浅析(二)
2009-02-22 00:11 4041我们来看下libevent的定时器的实现 在libevent ... -
libevent源码浅析(一)
2009-02-14 13:23 7347这里分析的是libevent-1.4.9。 PS:前面还看了 ... -
linux下的time处理
2009-01-04 18:02 6788在内核中有3个不同的时间: Wall time(real t ... -
linux下的elf结构
2008-12-12 00:20 5134可以看到链接器和加载器看待elf是完全不同的,链接器看到 ... -
php的c扩展
2008-12-07 18:24 4528在php中最核心的一个数据结构就是这个: typedef u ... -
linux下的管理内存相关的函数
2008-11-27 00:56 4420malloc的实现,在linux下的实现是这样的,当所需 ... -
linux下的数据对齐
2008-11-25 12:15 3600数据对齐也就是通过硬件来估算在数据的地址和内存块之间的联系。当 ... -
linux下检测ip冲突
2008-11-16 20:18 8071原理其实很简单,那就是广播一个arp包,然后recv,如果没有 ... -
今天碰到的一个问题
2008-10-29 22:33 1220将位图用 bmptopnm 转成pcl6的打印语言,然后直接c ... -
ftruncate和msync
2008-10-23 22:10 3436int ftruncate(int fd, off_t le ... -
GUN C正则表达式
2008-09-25 23:47 6143最近项目中要处理文本,因此就用了gun的正则表达式,它是pos ... -
看代码看的头晕
2008-09-06 01:04 1814最近工作需要在看ghostscript的代码,看得我头晕眼花, ... -
[转帖]MISRA--作为工业标准的C编程规范
2008-08-21 13:19 2798本文档转贴自孟岩的blog ... -
代码大全读书笔记1
2008-04-26 19:16 3786这么好的书,觉得写点东西,记录一下比较好。 4.1选择编程语 ...
相关推荐
libev的编译安装使用 一、 下载 二、 编译安装 解压文件,进入文件目录。 编译、安装。 三、 编写Demo测试
使用 libevent 和 libev 提高网络应用性能
libev是libevent之后的一个事件驱动的编程框架,其接口和libevent基本类似。官方介绍,其性能比libevent还要高,bug比libevent还少
libev手册
手册
libev4.24下载
主要分析libev 的设计架构与算法实现,阅读这篇文章之前,你需要对libev 的使用有大致的了解;libev 提供了 很多watcher 供开发者使用,以下仅对最重要最常用的几个watcher 机制进行分析,从中我们可掌握整个libev 的...
libev源码和文档
libev是高性能事件循环/事件模型的网络库,并且包含大量新特性,除了提供了基本的三大类事件(IO事件、定时器事件、信号事件)支持外还提供了周期事件、子进程事件、文件状态改变事件等多个事件的支持
官网已经无法下载,备份出来分享给大家,libev是libevent之后的一个事件驱动的编程框架
本压缩文件包含了libev及其开发文档.该库是一个高效的网络库,也是一个好的调度器.对于每个网络请求,你不必每次都去创建一个线程去处理,这样可能更浪费资源.该库就是为解决这类问题
这是 libev 的详细文档,尽管本文档是libev文档,其用法和设计背后的原理方面力求尽可能完善,但它既不是有关基于事件的编程的教程,也不会介绍libev的基于事件的编程。 在本文档中,通常假定读者已经熟悉基于事件的...
libev-4.15 最新代码
libev是高性能事件循环/事件模型的网络库,并且包含大量新特性。 它是继lievent和Event perl module之后的一套全新网络库。它追求的目标:速度更快,bug更少,特性更多,体积更小。 它和libevent很像,按照作者的...
libev是一个高性能事件循环库,内部封装epoll, 采用c++封装libev,可以快速开发服务端。
libev是高性能事件循环/事件模型的网络库,并且包含大量新特性。 它是继lievent和Event perl module之后的一套全新网络库。它追求的目标:速度更快,bug更少,特性更多,体积更小。
qt_eventdispatcher_libev 是基于 libev 的 Qt 事件调度器。 libev是高性能事件循环/事件模型的网络库,并且包含大量新特性。
本人经过查阅资料编写的一个简单进程监控demo,其中用到libev库中相关技术,测试时编译运行文件内的代码,他会打印子进程的ID,然后在控制台的kill命令杀死该进程id, 程序会检测到子进程已被杀死,并重新创建子进程。
libev-4.31源码,官网下载,给不方便的小盆友们。 libev是libevent之后的一个事件驱动的编程框架,其接口和libevent基本类似。据官方介绍,其性能比libevent还要高,bug比libevent还少。
libev的一个socket通讯代码实例,有客户端和服务端;