注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

老和山小和尚

敬天爱人

 
 
 

日志

 
 
 
 

libev:又一种通用的事件处理框架  

2010-01-21 15:45:59|  分类: 开发相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 据说比libevent速度快一点:http://libev.schmorp.de/bench.html
 功能也差不多,可以在多个平台上通用,还是不错的选择。
 说明文档:http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod

  1 // a single header file is required
  2 #include <ev.h>
  3 #include <stdio.h> // for puts
  4 #include <unistd.h>
  5 #include <pthread.h>
  6
  7
  8 // with the name ev_TYPE
  9 ev_io stdin_watcher;
 10 ev_timer timeout_watcher;
 11
 12 // all watcher callbacks have a similar signature
 13 // this callback is called when data is readable on stdin
 14     static void
 15 stdin_cb (EV_P_ ev_io *w, int revents)
 16 {
 17     char buff[128] = {0};
 18
 19     puts ("stdin ready");
 20
 21     printf("call back process id: %lu, thread id:%lu\n", getpid(), pthread_self());
 22
 23     read(STDIN_FILENO, buff, 128);
 24
 25     printf("Read: %s", buff);
 26
 27     // for one-shot events, one must manually stop the watcher
 28     // with its corresponding stop function.
 29     /*ev_io_stop (EV_A_ w);*/
 30
 31     // this causes all nested ev_loop's to stop iterating
 32     /*ev_unloop (EV_A_ EVUNLOOP_ALL);*/
 33 }
 34
 35 // another callback, this time for a time-out
 36     static void
 37 timeout_cb (EV_P_ ev_timer *w, int revents)
 38 {
 39     puts ("timeout");
 40     // this causes the innermost ev_loop to stop iterating
 41     ev_unloop (EV_A_ EVUNLOOP_ONE);
 42 }
 43
 44     int
 45 main (void)
 46 {
 47     // use the default event loop unless you have special needs
 48     struct ev_loop *loop = ev_default_loop (0);
 49
 50     // initialise an io watcher, then start it
 51     // this one will watch for stdin to become readable
 52     ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);
 53     ev_io_start (loop, &stdin_watcher);
 54
 55     // initialise a timer watcher, then start it
 56     // simple non-repeating 5.5 second timeout
 57     ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);
 58     ev_timer_start (loop, &timeout_watcher);
 59
 60     printf("main process id: %lu, thread id:%lu\n", getpid(), pthread_self());
 61
 62     // now wait for events to arrive
 63     ev_loop (loop, 0);
 64
 65     // unloop was called, so exit
 66     return 0;
 67 }
 68
  评论这张
 
阅读(4085)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018