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