本例是以linux环境c++的用法,ide用的是vs2019

一、libev的安装

我们采用的是apt-get方法(偷懒^_^),你也可以采用源码方式安装 

  1. sudo apt-get install libev-dev

二、vs 2019的库引入

我们在这里引入libev,curl和glib库,对就命令编译的格式为

  1. g++ main.cpp -o main -lev -lcurl -lglib-2.0 -L/usr/include/glib-2.0 -L/usr/lib/aarch64-linux-gnu/glib-2.0/include/

三、使用说明

1.引入ev.h

2.初始化libev

  1. struct ev_loop* loop;
  2. loop = EV_DEFAULT;

3.添加监听

io监听

  1. /**读取监听**/
  2. ev_io_init(&socket_read_watcher, socket_read_action, fd, EV_READ);
  3. ev_io_start(loop, &socket_read_watcher);

信号中断监听

  1. /**系统信号监听**/
  2. ev_signal_init(&signal_watcher, signal_action, SIGINT);
  3. ev_signal_start(loop, &signal_watcher);

定时任务

  1. /**心跳监听部分start**/
  2. ev_timer_init(&socket_time_heart_watcher, socket_heart_watcher, 5.5, 0.);
  3. ev_timer_start(loop, &socket_time_heart_watcher);

启动监听

  1. ev_run(loop, 0);

四、示例Demo

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <time.h>
  4. #include <unistd.h>
  5.  
  6. #include <ev.h>
  7.  
  8. #include "main.h"
  9.  
  10. using namespace std;
  11.  
  12. /**
  13. 定时监听
  14. */
  15. ev_timer socket_time_heart_watcher;
  16.  
  17. /**
  18. socket监听
  19. */
  20. ev_io socket_read_watcher;
  21.  
  22. /**
  23. 信号
  24. */
  25. ev_signal signal_watcher;
  26.  
  27. struct ev_loop* loop;
  28.  
  29. /*************************************************
  30. Function: // 信号监听
  31. Description: // 信号监听
  32. @main_loop //libev
  33. *************************************************/
  34. void signal_action(struct ev_loop* main_loop, ev_signal* signal_w, int e)
  35. {
  36. cout << "In Signal action" << endl;
  37. }
  38.  
  39. /*************************************************
  40. Function: // SOCKET读监听
  41. Description: // 读监听
  42. @main_loop //libev
  43. *************************************************/
  44. void socket_read_action(EV_P_ ev_io* w, int revents)
  45. {
  46. try
  47. {
  48.  
  49. }
  50. catch (...)
  51. {
  52.  
  53. }
  54. }
  55.  
  56. /*************************************************
  57. Function: // SOCKET心跳
  58. Description: // 心跳
  59. @main_loop //libev
  60. *************************************************/
  61. void socket_heart_watcher(EV_P_ ev_timer* timer, int revents)
  62. {
  63. try
  64. {
  65. cout << "i'm heart " << endl;
  66.  
  67. }
  68. catch (...)
  69. {
  70.  
  71. }
  72.  
  73. timer->repeat = 5.0;
  74.  
  75. ev_timer_again(loop, timer);
  76. }
  77.  
  78. int main(int argc, char* argv[])
  79. {
  80. cout << "start!.....\n" << endl;
  81.  
  82. int i = 0;
  83.  
  84. loop = EV_DEFAULT;
  85.  
  86. /**网络读取监听**/
  87. ev_io_init(&socket_read_watcher, socket_read_action, 0, EV_READ);
  88. ev_io_start(loop, &socket_read_watcher);
  89.  
  90. /**系统信号监听**/
  91. ev_signal_init(&signal_watcher, signal_action, SIGINT);
  92. ev_signal_start(loop, &signal_watcher);
  93.  
  94. /**心跳监听部分start**/
  95. ev_timer_init(&socket_time_heart_watcher, socket_heart_watcher, 5.5, 0.);
  96. ev_timer_start(loop, &socket_time_heart_watcher);
  97.  
  98. ev_run(loop, 0);
  99. return 0;
  100. }

  

libev的用法的更多相关文章

  1. libev学习笔记

    转 libev的使用--结合Socket编程 作者:cxy450019566 之前自己学过一些libev编程的基础,这次写压测刚好用上了,才算真正动手写了些东西,在这里做一些总结.写这篇文章是为了用浅 ...

  2. ss-libev 源码解析udp篇 (3)

    本篇分析server_recv_cb,这个是udp转发中最重要的函数. server_recv_cb: 当ss-local或ss-server接收到来自前端的udp数据包时调用.这个函数代码比较多,除 ...

  3. libev学习(一)

    一.libev简介 Libev是一个事件循环:你注册感兴趣的特定事件(比如一个文件可以读取时或者发生超时时),它将管理这些事件源,将这些事件反馈给你的程序.为了实现这些,至少要在你的进程(或线程)中执 ...

  4. 浅析libev的ev_signal过程

    ev_signal是libev提供的对信号处理的一个模块,基本上是对sigaction函数的一个封装,并将本身是异步的信号转化为同步.ev_signal的使用十分简单: #include <ev ...

  5. debian下编译libev库

    系统为Linux debian 2.6.32-5-686.这是裸系统,连xwindows都没有.帐户为root,不是的注意一下权限.这里想说明安装过程及出现的问题,故打印的信息较多,以供出现错误的读者 ...

  6. Socket网络编程--Libev库学习(3)

    这一小节继续讲解各个观察器(Watcher). 上一小节已经讲解了ev_io(IO可读可写观察器),ev_stat(文件属性变化观察器),ev_signal(信号处理观察器),ev_timer(定时器 ...

  7. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  8. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  9. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

随机推荐

  1. mysql之索引组织表

    1.二叉树/平衡树.B-tree.B+tree.B*tree 树:最上一层是根节点.最底下一层是叶子节点.(一般左边节点小于右边节点) 二叉树:每个节点最多只能有两个分支,一般只用于教材.二叉树的深度 ...

  2. Java 中常见的细粒度锁实现

    上篇文章大致说了下 ReentrantLock 类的使用,对 ReentrantLock 类有了初步的认识之后让我们一起来看下基于 ReentrantLock 的几种细粒度锁实现. 这里我们还是接着用 ...

  3. 移动端调试Web页面

    移动端调试Web页面 虽然可以在PC下,通过开发者工具,模拟移动端,但是这样只能模拟页面样式,对于代码的执行情况是无法模拟的,所以在此结合实际调试经验,针对安卓与IOS设备,进行总结. IOS 安卓 ...

  4. MathType总结编辑括号的类型(下)

    在数学中,所涉及到的公式总是会有各种各样的情况,对于括号这些都是最常见的了.在最开始的四则基本运算中我们学会了使用括号,而随着学习的不断深入,所涉及到的符号与公式都越来越多,对于括号的类型也是使用得非 ...

  5. C语言讲义——注释

    注释 什么是注释?  --注释写在代码中的文字,不参与代码编译,不影响运行结果. 为什么要注释?--让代码可读性更强. C语言有两种注释: 单行注释 // 多行注释 /* */ 多行注释可以只有一行, ...

  6. redis数据量大时bgsave线程阻塞redis原因

    rt 转载 Latency generated by fork In order to generate the RDB file in background, or to rewrite the A ...

  7. 学会了这一招,距离Git大神不远了!

    大家好,今天我们来介绍git当中一项非常重要的功能--交互式工具 有的时候如果我们要处理的文件很多,使用git add .等操作会非常有隐患,因为很有可能我们一不小心就疏忽了一些内容.如果我们使用一个 ...

  8. 线性代数中的线性方程组(chapter 1)

    目录 线性代数中的线性方程组 线性方程组 行化简解法和阶梯型矩阵 向量方程 矩阵方程$Ax = b$ 线性代数中的线性方程组 第一章从线性方程组的角度,通过解线性方程组,开始解释数学矩阵,以及和线性代 ...

  9. vue获取浏览器地址栏参数(?及/)路由+非路由实现方式

    1.? 参数 浏览器参数形式:http://javam4.com/m4detail?id=1322914793170014208 1.1.路由取参方式 this.$route.query.id 前端跳 ...

  10. charles功能(三)弱网测试(模拟超慢网速,会导致接口数据返回超时的那种慢)

    模拟超慢网速(会导致接口数据返回超时的那种...) 设置带宽和延迟时间(毫秒) 注:可以根据下图中的翻译体会下导致网络延迟的原因: 然后打开网页回变得非常满