作者

QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118

参考

libev Document
MinGW 编译libevent
用Libev作TCP server的问题
Libev on Windows
libev源码解析——总览
重写 libev 的 EV_WIN32_HANDLE_TO_FD
libev学习之ev_run
Libev轻网络库 源码浅析
libev源码解读
网络库libevent、libev、libuv对比

说明

libev对windows支持不好,当然也可能是对mingw支持不好,官方是支持windows的,libuv貌似对windows的支持更好,libuv封装了libev,linux下用libev实现,Windows下用IOCP实现。

方法

mingw下编译libev,打开msys,

make clean
./configure --prefix=$cur_path/mingw-static-530_32 CFLAGS=-static --enable-static LDFLAGS=-static --disable-shared
make
make install

qt引用,测试初始化会卡死,

INCLUDEPATH += libev/include
LIBS += ..\recorder-server\libev\lib\libev.a

现采用直接在工程中使用源文件的方式,添加文件,

ev.c
ev.h
ev_select.c
ev_win32.c
ev_vars.h
ev_wrap.h

在前4个文件文件头部添加下面三个宏,

#define EV_STANDALONE              /* keeps ev from requiring config.h */
#define EV_USE_SELECT 1
#define EV_SELECT_IS_WINSOCKET 1   /* configure libev for windows select */

修改代码,这两个assert注释,

ev.c:        line2134 assert (("libev: only socket fds supported in this configuration", ret == 0));
ev_select.c: line85   assert (("libev: fd >= FD_SETSIZE passed to fd_set-based select backend", fd < FD_SETSIZE));

建一个线程跑EV_RUN,

void *jsonrpc_cmd_thread_func(void * param)
{struct jrpc_server *server = (struct jrpc_server *)param;printf("%s line%d thread enter\n", __FUNCTION__, __LINE__);EV_RUN(server->loop, 0);printf("%s line%d thread exit\n", __FUNCTION__, __LINE__);EV_BREAK(server->loop, EVBREAK_ALL);return 0;
}ret = pthread_create(&tid, NULL, jsonrpc_cmd_thread_func, server);
if(ret != 0)
{printf("%s failed\n", __FUNCTION__);return ret;
}

现在可以编译过,我测试,客户端连接上之后,发送数据,服务端返回数据,然后EV_RUN就退出了。。。无法再处理数据,有在mingw下成功使用libev的,不吝赐教。。。

mingw使用libev相关推荐

  1. Libev documentation

    2019独角兽企业重金招聘Python工程师标准>>> NAME libev - a high performance full-featured event loop writte ...

  2. Windows下Eclipse配置基于MinGW的C/C++开发环境

    Eclipse安装CDT及其他插件的方法 1.搜索CDT线上安装地址 进入Ecllipse插件下载官网https://www.eclipse.org/cdt/downloads.php,在官网页面列表 ...

  3. libev源码解析——定时器监视器和组织形式

    我们先看下定时器监视器的数据结构.(转载请指明出于breaksoftware的csdn博客) /* invoked after a specific time, repeatable (based o ...

  4. libev源码解析——定时器原理

    本文将回答<libev源码解析--I/O模型>中抛出的两个问题.(转载请指明出于breaksoftware的csdn博客) 对于问题1:为什么backend_poll函数需要指定超时?我们 ...

  5. libev源码解析——I/O模型

    在<libev源码解析--总览>一文中,我们介绍过,libev是一个基于事件的循环库.本文将介绍其和事件及循环之间的关系.(转载请指明出于breaksoftware的csdn博客) 目前i ...

  6. libev源码解析——调度策略

    在<libev源码解析--监视器(watcher)结构和组织形式>中介绍过,监视器分为[2,-2]区间5个等级的优先级.等级为2的监视器最高优,然后依次递减.不区分监视器类型和关联的文件描 ...

  7. libev源码解析——监视器(watcher)结构和组织形式

    在<libev源码解析--总览>中,我们介绍了libev的一些重要变量在不同编译参数下的定义位置.由于这些变量在多线程下没有同步问题,所以我们将问题简化,所提到的变量都是线程内部独有的,不 ...

  8. libev源码解析——总览

    libev是个非常优秀的基于事件的循环库,很多开源软件,比如nodejs就是使用其实现基础功能.本系列将对该库进行源码分析.(转载请指明出于breaksoftware的csdn博客) 不知道是被墙了还 ...

  9. Windows7下配置MinGW+CodeBlocks+OpenCV2.3.1

    1.下载mingw-get-inst-20111118:http://sourceforge.net/projects/mingw/: 2.双击mingw-get-inst-20111118.exe, ...

最新文章

  1. Centos安装、配置nginx
  2. C# 打开文件/跳转链接
  3. git 查看修改明细_Git(查看修改记录)
  4. 沟通CTBS助×××系统巨头解决南北互通问题
  5. 参考文献引用详细教程
  6. ListView 设置 scrollbars 之后出现的细线白边的解决方法
  7. gorm时间格式化问题详解
  8. MQTT客户端远程控制WIFI设备(阿里云物联网平台)
  9. OTG 线结构原理及注意事项
  10. 解决Eclipse中的卡死现象
  11. 浅读《解密社群粉丝经济学》几点观点
  12. Android 性能优化必知必会(转载)
  13. 10分钟go crawler colly从入门到精通
  14. 7.搜索求解策略: 搜索的概念, 状态空间搜索, 盲目/启发式图搜索策略, 启发信息和估价函数, A搜索算法, A*搜索算法及特性分析
  15. HD声卡与AC97声卡设置方法及原理
  16. 一份【超级全面】的前端工程师的技术知识自检清单,初学者请收藏
  17. cad无法安装_安装失败、弹窗错误!Autodesk都是娇气的主...(CAD/MAX完美安装工具)...
  18. 基于Java的飞机大战游戏的设计与实现
  19. 先出报表还是先计提所得税_先结转损益还是先计提企业所得税
  20. HTML 实现背景图片的替换

热门文章

  1. 想要骑驴找马,这些事一定要注意!
  2. sqlite3打开本地.db文件及增删改查语句
  3. MySql保姆级安装教程
  4. 几何运算是计算机的基本功能,渐开线圆柱齿轮几何参数计算的计算机辅助设计系统...
  5. android文件管理器获取路径,获取Android文件的绝对路径
  6. Android 使用模板生成Word文档,支持手机直接查看word
  7. java转换成class文件_浅谈JVM编译原理-.java文件转变为.class文件的过程
  8. 简简单单右键菜单-闲情偶寄-iteye技术网站
  9. 自动化软件测试流程的七个步骤和内容
  10. linux挂载cifs磁盘_将SMB/CIFS网络硬盘永久的挂载到Ubuntu上