windows 下编译 libevent


[windows 下编译 libevent]

1.4版本

在windows下有工程, 但工程编译不过.

需要将几个文件加入到工程中.

最终的文件是: event.c evutil.c log.c signal.c win32.c.

还需要将win32code下的event-config.h复制到外面的目录下.


1.1a 版本

1、到libevent官网下载源码包,我下载的是 1.1a 版本(libevent-1.1a-win32-src.zip)
2、解压文件到一个目录
3、打开项目文件 {解压目录}/WIN32-Prj/libevent.dsw
4、设置libevent classes为当前活动项目
5、进行编译,编绎时会出错
err.c': No such file or directory
解决方法: 在源文件目录中删除文件err.c
error C2065: '__FUNCTION__' : undeclared identifier
解决方法: 在源文件config.h中加入如下行
#define __FUNCTION__ ""
重新编译,成功。
6、编译例子时,会出现错误
libevent.lib(win32.obj) : error LNK2001: unresolved external symbol ___WSAFDIsSet@8
libevent.lib(win32.obj) : error LNK2001: unresolved external symbol __imp__select@20
解决方法: 在源文件主程序中加入如下行
#pragma comment(lib,"ws2_32.lib")
重新编译,OK。
运行示例。

2.0版本

不知道怎么编译, nmake Makefile.nmake 无情的失败了.

可能是vc6被BS了

附: event分析:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

event_init()会产生一个 event_base, 每个使用libevent的线程需要这样一个 event_base. 如果你全局只有一个线程使用libevent的话, 不必关注event_base有关的函数.

———————————————————————
event_set 用于关联 (事件,Socket,回调函数), event_set 之后要使用 event_base_set 将事件关联到线程的 event_base 上, 如果你只有一个线程使用libevent的话则不必.

———————————————————————
event_add 用于将 event 增加到 event_base 的监听中去, 同一事件不能增加两次, 否则event_del一次之后会CPU上升到100%, libevent内部一直在event_del. 但事件超时timeout后还要再

重新event_add一次, 本来不知道为什么, 但后来发现了, libevent1.4是要重新add, libevent 2.0 不需要ReAdd.

———————————————————————
event_base_dispatch 是事件循环

———————————————————————
有 event_base_xxx 时要使用 event_base_xxx, 如 event_loopbreak 和 event_base_loopbreak, 否则会使用一个 全局变量 current_base, 如果你是单线程使用libevent的话可以不用

event_base.
———————————————————————
event 结构体只能在 libevent 的循环退出后才能删除.

比如你删除了一个event, 但可能该event的timeout事件会在event删除后回调, 这时event结构体中的base已经被我们干掉了.

我是在线程退出后再将那些event结构删除, 设计一个event池, 回收利用event.

timeval 是可以删除的, 可以使用临时变量, 虽然按指针传递给了libevent.

———————————————————————
libevent不是线程安全的, 要新增加socket事件监听的话要向线程发消息.

线程的循环是 libevent 的循环, 只能由libevent收消息.

因此需要一个线程收发消息的 socketpair, 依靠 libevent 来进行线程消息发送, 来控制这个线程,

参考 SPServer.

———————————————————————


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM