• vs2010下libevent的使用


    下载最新的libevent,目前是
    libevent-2.0.20-stable.tar.gz

    修改“D:\libevent-2.0.10-stable\event_iocp.c”、“D:\libevent-2.0.10-stable \evthread_win32.c”、“D:\libevent-2.0.10-stable\listener.c”三个文件,在文件开头分别加上一 行:
    #define _WIN32_WINNT 0x0500
    在Makefile.nmake中的CFLAGS中加入/ZI选项,同时去掉/Ox优化选项,这样生成的lib库会带有调试信息 
    进入VS2010命令提示
    切换到libevent的所在目录
    nmake /f Makefile.nmake
    编译成功生成
    libevent.lib、libevent_core.lib、libevent_extras.lib

    复制include 和libs
    mkdir D:\libevent\include\
    xcopy /E /H /R D:\libevent-2.0.16-stable\include\* D:\libevent\include\
    xcopy /E /H /R D:\libevent-2.0.16-stable\WIN32-Code\* D:\libevent\include\
    xcopy /E /H /R D:\libevent-2.0.16-stable\*.h D:\libevent\include\
    mkdir d:\libevent\libs
    copy D:\libevent-2.0.16-stable\*.lib D:\libevent\libs\

     新建vs2010控制台项目并使用以下代码

    #include <stdio.h>

    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include <winsock2.h>

    #include <event.h>
    #include <evhttp.h>

    void root_handler(struct evhttp_request *req, void *arg)
    {
        struct evbuffer *buf = evbuffer_new();
        if(!buf){
            puts("failed to create response buffer");
            return;
        }

        evbuffer_add_printf(buf, "Hello: %s\n", evhttp_request_uri(req));
        evhttp_send_reply(req, HTTP_OK, "OK", buf);
    }

    void generic_handler(struct evhttp_request *req, void *arg)
    {
        struct evbuffer *buf = evbuffer_new();
        if(!buf){
            puts("failed to create response buffer");
            return;
        }

        evbuffer_add_printf(buf, "Requested: %s\n", evhttp_request_uri(req));
        evhttp_send_reply(req, HTTP_OK, "OK", buf);
    }

    int main(int argc, wchar_t* argv[])
    {
     struct evhttp *httpd;

     WSADATA wsaData;
     DWORD Ret;
     if ((Ret = WSAStartup(MAKEWORD(22), &wsaData)) != 0) {
      printf("WSAStartup failed with error %d\n", Ret);
      return -1;
     }

        event_init();

        httpd = evhttp_start("0.0.0.0"18505);
        if(!httpd){
      return 1;
     }

        evhttp_set_cb(httpd, "/", root_handler, NULL);
        evhttp_set_gencb(httpd, generic_handler, NULL);

     printf("httpd server start OK!\n");

        event_dispatch();

        evhttp_free(httpd);

     WSACleanup();
        return 0;
    }

     

    进入配置管理器,设置活动项目为release

    C++
    常规\附加包含目录 .\include;.\include\event2
    代码生成\运行库 多线程 (/MT)
    高级\编译为 编译为 C 代码 (/TC)
    链接器
    常规\附加库目录 .\libs
    输入\附加依赖项 ws2_32.lib;wsock32.lib;libevent.lib;libevent_core.lib;libevent_extras.lib;%(AdditionalDependencies)
    输入\忽略特定默认库 libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib;%(IgnoreSpecificDefaultLibraries)
     
  • 相关阅读:
    [转]Request Control Introduce
    [转]How to set the control word of FPU in delphi
    Delphi消息分发机制
    Delphi Handle Exception
    python 简单图像处理(13) 二值图腐蚀和膨胀,开运算、闭运算
    如何在Linux下实现50万并发
    转载 google hack
    Linux 网卡如何支持TSO GSO指南
    收藏:网口协商
    AVR地址空间
  • 原文地址:https://www.cnblogs.com/toosuo/p/2655659.html
Copyright © 2020-2023  润新知