首页 > 其他分享 >libev使用

libev使用

时间:2023-04-09 22:48:48浏览次数:25  
标签:ev EV libev timer tm 使用 now loop

 

1.安装:https://blog.csdn.net/Dancer__Sky/article/details/85156972

2.使动态链接库生效命令:/sbin/ldconfig -v

3.编译命令:gcc -o libevtest2 libevtest2.c -lev

4.测试程序

    1. root@SHPD18F-SP05:~# cat libevtest2.c
      
      #include <stdio.h>
      #include <stdint.h>
      #include <unistd.h>
      #include <string.h>
      #include <time.h>
      #include <ev.h>
       
      #define TIMER_TEST
      //#define EV_IO_TEST
       
      /*获取系统本地时间打印*/
      uint32_t print_timenow()
      {
        time_t now;
        struct tm *tm_now;
        time(&now);
        tm_now = localtime(&now);
        uint32_t times = tm_now->tm_hour * 3600 + tm_now->tm_min * 60 + tm_now->tm_sec;
        printf("[%02d:%02d:%02d]\r\n", tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);
        return times;
      }
       
       
      #ifdef TIMER_TEST
      /*定时器事件测试*/
      ev_timer timer_watcher;
       
      static void timer_cb (EV_P_ ev_timer *w, int revents)
      {
        printf("timer clock....");
        print_timenow();
        //ev_timer_stop(EV_A_ w);
        //ev_break(EV_A_ EVBREAK_ONE);
      }
       
      int main()
      {
        /*多线程不安全*/
        struct ev_loop *loop = EV_DEFAULT;
        ev_timer_init (&timer_watcher, timer_cb, 3, 1);
        ev_timer_start (loop, &timer_watcher);
        ev_run (loop, 0);
        return 0;
      }
      #endif
       
       
      #ifdef EV_IO_TEST
       
      ev_io stdin_watcher;
       
      static void stdin_cb (struct ev_loop *loop ,struct ev_io *w, int revents)
      {
        void *user_data = ev_userdata(loop);
        int num = *((int *)user_data);
        printf("stdin input......userdata = %d\r\n", num);
        ev_io_stop (loop, w);
        // this causes all nested ev_run's to stop iterating
        ev_break (EV_A_ EVBREAK_ALL);
      }
       
      int main()
      {
        /*创建一个事件循环,多线程安全*/
        struct ev_loop *loop = ev_loop_new(EVBACKEND_EPOLL);
        if (NULL == loop) {
          printf("create loop failed\r\n");
          return 1;
        }
        //传输用户数据
        int user_data = 666;
        ev_set_userdata(loop, &user_data);
        //初始化并开始
        ev_io_init (&stdin_watcher, stdin_cb, STDIN_FILENO, EV_READ);
        ev_io_start (loop, &stdin_watcher);
        //循环检测事件发生处理
        ev_run (loop, 0);
        return 0;
      }
      #endif

       

标签:ev,EV,libev,timer,tm,使用,now,loop
From: https://www.cnblogs.com/miwaiwai/p/17301317.html

相关文章

  • SpringMVC中使用引入jquery不能加载页面
    今天在学习springMVC的json数据绑定时,需要使用到jquery发送ajax请求。但是当我通过是<script>标签引入了jquery.js。但是当我访问该jsp的时候就是不显示页面的内容我一直以为时SpringMVC的servelt拦截器拦截了静态资源,但是我过滤了静态资源还是不显示。后来才发现,我把<script......
  • Java 异常处理:使用和思考
    概念异常处理的概念起源于早期的编程语言,如LISP、PL/I和CLU。这些编程语言首次引入了异常处理机制,以便在程序执行过程中检测和处理错误情况。异常处理机制随后在Ada、Modula-3、C++、Python、Java等编程语言中得到了广泛采用和发展。在Java中,异常处理是提供一种在程序运行......
  • 【学习笔记】rabbitmq设置队列ttl和使用延迟插件的代码示例
    文章目录设置队列ttl配置文件生产者消费者设置消息ttl延迟插件的使用修改配置文件修改生产者修改消费者设置队列ttl代码架构:创建两个队列QA和QB,两者队列TTL分别设置为10S和40S,然后在创建一个交换机X和死信交换机Y,它们的类型都是direct,创建一个死信队列QD配置文件spring.rabbitmq.h......
  • 优先级队列PriorityQueue在算法问题中的使用
    文章目录优先级队列介绍与优先级队列有关的习题[179.最大数][918.环形子数组的最大和][1094.拼车][264.丑数II]前k个出现频率最高的数字用优先级队列合并k个有序链表滑动窗口的最大值其他:对二维数组自定义排序优先级队列介绍优先队列一般基于二叉堆实现,二叉堆:堆的根节点的优......
  • 【springboot中使用拦截器】
    1.拦截器原理1.定义拦截器:2.配置拦截器3.解决静态资源被拦截2.拦截器使用实例2.1判断用户有没有登录2.2取消拦截操作1.拦截器原理拦截器的原理很简单,是AOP的一种实现,专门拦截对动态资源的后台请求,即拦截对控制层的请求。使用场景比较多的是判断用户是否有权限请求后台,更拔高一层的......
  • 【学习笔记】mybatis中的缓存介绍和使用
    文章目录介绍一级缓存和二级缓存让一级缓存失效的方法二级缓存的使用清空或者跳过二级缓存的3种方式介绍什么是缓存?缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则从其他存储设备中获取,缓存最重要的一点就是从其内部获取数据的速度是......
  • 解决Godot使用VsCode编写C#代码,智能提示不见了[一问随笔]
    问题:我的项目采用了godot+visualstudiocode+C#,有天突然换引擎,从Godot4.0.0升级到Godot4.0.2,visualstudiocode突然不给代码提示了,甚是奇怪。查看报错发现这样一句话找不到指定的sdk“godot.net.sdk/4.0.2”糟了!不会这个版本不支持用vscode写代码吧!解决方式:......
  • flask之信号,flask-script,sqlalchemy介绍和快速使用,创建操作数据表
    目录flask之信号,flask-script,sqlalchemy介绍和快速使用,创建操作数据表昨日回顾今日内容详细1信号1.2django信号2flask-script3sqlalchemy快速使用4使用sqlalchemy创建操作数据库补充flask之信号,flask-script,sqlalchemy介绍和快速使用,创建操作数据表昨日回顾#1local对象......
  • unidac 在linux loongxarch64或arm64使用SQLite
    unidacSQLite默认使用静态连接方式,但UNIDAC官方SQLite未提供arm64或loongxarch64静态库,造成linuxfor龙芯或arm64无法使用SQLite,经跟踪unidac源码发现将souce/uniProviders/SQLite/LiteDac.inc添加{$DEFINENOSTATIC}然后安装liteprovider10.lpk就可以。//////////////////......
  • ESP32使用433模块通讯
    发送端,25pin#include<Arduino.h>#include<WiFi.h>#include<RCSwitch.h>#defineTXD225RCSwitchmySwitch=RCSwitch();voidsetup(){Serial.begin(115200);mySwitch.enableTransmit(TXD2);//Optionalsetprotocol(default......