mingw使用libev

作者

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的,不吝赐教。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值