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

一、libev的安装

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

sudo apt-get install libev-dev

二、vs 2019的库引入

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

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

struct ev_loop* loop;
loop = EV_DEFAULT;

3.添加监听

io监听

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

信号中断监听

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

定时任务

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

启动监听

ev_run(loop, 0);

四、示例Demo

#include <cstdio>
#include <iostream>
#include <time.h>
#include <unistd.h> #include <ev.h> #include "main.h" using namespace std; /**
定时监听
*/
ev_timer socket_time_heart_watcher; /**
socket监听
*/
ev_io socket_read_watcher; /**
信号
*/
ev_signal signal_watcher; struct ev_loop* loop; /*************************************************
Function: // 信号监听
Description: // 信号监听
@main_loop //libev
*************************************************/
void signal_action(struct ev_loop* main_loop, ev_signal* signal_w, int e)
{
cout << "In Signal action" << endl;
} /*************************************************
Function: // SOCKET读监听
Description: // 读监听
@main_loop //libev
*************************************************/
void socket_read_action(EV_P_ ev_io* w, int revents)
{
try
{ }
catch (...)
{ }
} /*************************************************
Function: // SOCKET心跳
Description: // 心跳
@main_loop //libev
*************************************************/
void socket_heart_watcher(EV_P_ ev_timer* timer, int revents)
{
try
{
cout << "i'm heart " << endl; }
catch (...)
{ } timer->repeat = 5.0; ev_timer_again(loop, timer);
} int main(int argc, char* argv[])
{
cout << "start!.....\n" << endl; int i = 0; loop = EV_DEFAULT; /**网络读取监听**/
ev_io_init(&socket_read_watcher, socket_read_action, 0, EV_READ);
ev_io_start(loop, &socket_read_watcher); /**系统信号监听**/
ev_signal_init(&signal_watcher, signal_action, SIGINT);
ev_signal_start(loop, &signal_watcher); /**心跳监听部分start**/
ev_timer_init(&socket_time_heart_watcher, socket_heart_watcher, 5.5, 0.);
ev_timer_start(loop, &socket_time_heart_watcher); ev_run(loop, 0);
return 0;
}

  

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. Java学习之AWT GUI编程

    Java学习之AWT GUI编程 0x00 前言 既然前面提到了要重写冰蝎和一些反序列化工具,当然就不能随便说说而已.在编写这些工具还是要使用图形化工具来的方便一些,所以提前把GUI的框架给学习一遍. ...

  2. 查看 /var/log目录下文件个数 命令tree 、cut

    查看 /var/log目录下文件个数 方法1. [root@oldboy learn_shell]# tree -L 1 /var/log/ |tail -1 5 directories, 42 fi ...

  3. 来看看面试必问的HashMap,一次彻底帮你搞定HashMap源码

    HashMap结构 数组+链表+红黑树 链表大于8转红黑树,红黑树节点数小于6退回链表. 存放的key-value的Node节点 static class Node<K,V> implem ...

  4. 如何修改IDM下载器的临时文件夹位置

    所有的应用程序在下载时,都会有一些默认的选项.比如产生的临时文件存放在C盘目录下,或者定期自动更新等设置.那么当我们的计算机上安装了很多程序之后,C盘的空间就会渐渐地变小了,从而有了空间不足等等情况, ...

  5. 用MindManager做完思维导图后怎么加密

    使用MindManager我们可以制作出很多简洁明了的思维导图,然而,不论是分享还是查看这些导图,我们往往需要对导图进行加密操作,尤其是制定公司或企业的下一步发展计划时,加密导图就显得很有必要了. M ...

  6. 如何用CorelDRAW画箭头?

    CorelDRAW,简称为cdr,是一款专业的矢量绘图软件,在设计界也是常用的专业设计之一,在日常的设计工作中,我们常常需要绘制一些特殊的图形,比如箭头.很多对cdr不是特别熟练的小伙伴不知道如何用c ...

  7. Java基础教程——Lambda表达式

    Lambda表达式 Java8引入Lambda表达式,可以使代码更简洁. 格式:参数,箭头,代码 (参数名)->{代码} Lambda表达式体现了"函数式编程思想"-- 面向 ...

  8. java中的强引用(Strong reference),软引用(SoftReference),弱引用(WeakReference),虚引用(PhantomReference)

    之前在看深入理解Java虚拟机一书中第一次接触相关名词,但是并不理解,只知道Object obj = new Object()类似这种操作的时候,obj就是强引用.强引用不会被gc回收直到gc roo ...

  9. GoFrame 模板引擎对变量转义输出- XSS 漏洞

    GoFrame 模板引擎对变量转义输出- XSS 漏洞 环境: gf v1.14.4 go 1.11 官网说明 默认情况下,模板引擎对所有的变量输出并没有使用HTML转码处理,也就是说,如果开发者处理 ...

  10. Spring Boot 实现看门狗功能 (调用 Shell 脚本)

    需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功 ...