精华内容
下载资源
问答
  • VS2015编译后的libevent头文件和库文件——基于libevent-2.1.10
  • libevent头文件问题

    2019-06-22 10:24:37
    工程需要用到libevent,但是在编译的时候出错: In file included from /usr/local/include/event.h:68:0, from /home/project/base.cpp:26: /usr/local/include/event2/event_struct.h:166:30: error: macro ...

    工程需要用到libevent,但是在编译的时候出错:

    In file included from /usr/local/include/event.h:68:0,
                     from /home/project/base.cpp:26:
    /usr/local/include/event2/event_struct.h:166:30: error: macro "LIST_HEAD" passed 2 arguments, but takes just 1
     LIST_HEAD (event_dlist, event); 
                                  ^
    /usr/local/include/event2/event_struct.h:166:1: error: ‘LIST_HEAD’ does not name a type
     LIST_HEAD (event_dlist, event); 
     

    解决方法:

    打开/usr/local/include/envent2/event_struct.h, 第166行,改为:#define LIST_HEAD (event_dlist, event); 就成功编译了

    展开全文
  • 使用libevent编写的程序,配有博客教程,工程中的inc、lib为已编译的libevent,大家可以直接下载回去使用,免得再在官网下载
  • libevent的win10(32),android(NDK10),linux(cenots7),库文件和头文件,NDK10以上的就无法使用了。
  • libevent中的Timer使用

    2016-03-17 10:57:00
    #include <stdio.h> #include <...// libevent头文件 #include <event.h> #include "tool.h" #include "header.h" static struct event tickEvt; static struct event_base *b...
    #include <stdio.h>
    #include <iostream>
    
    // libevent头文件
    #include <event.h>
    
    #include "tool.h"
    #include "header.h"
    
    static struct event tickEvt;
    static struct event_base *baseEvt;
    
    void PrintTime()
    {
        struct timeval timer;
        gettimeofday(&timer, NULL);
        volatile uint current_time = (uint)(timer.tv_sec);
        PRINT("current_time:%d", current_time);
    }
    
    // 定时事件回调函数
    void onTime(int sock, short event, void *arg)
    {
        PrintTime();
        struct timeval tv = {.tv_sec = 1, .tv_usec = 0 };
        // 重新添加定时事件(定时事件触发后默认自动删除)
        event_add((struct event*)arg, &tv);
    }
    
    void startEvt()
    {
        // 初始化
        event_init();
    
        struct event evTime;
        // 设置定时事件
        evtimer_set(&evTime, onTime, &evTime);
    
        struct timeval tv = {.tv_sec = 1, .tv_usec = 0 };
        // 添加定时事件
        event_add(&evTime, &tv);
    
        // 事件循环
        event_dispatch();
    }
    
    void StartEvent()
    {
        // 初始化
        //event_init();
        baseEvt = event_base_new();
    
        // 设置定时事件
        evtimer_set(&tickEvt, onTime, &tickEvt);
    
        struct timeval tv = {.tv_sec = 1, .tv_usec = 0 };
        // 添加定时事件
        //event_add(&tickEvt, &tv);
        event_base_set(baseEvt, &tickEvt);
        evtimer_add(&tickEvt, &tv);
    
        // 事件循环
        //event_dispatch();
        event_base_loop(baseEvt, 0);
    }
    
    int main(int argc, char* argv[])
    {
        //startEvt();
        StartEvent();
    
        return 0;
    }

    对libevent中Timer的分析:(http://www.monkey.org/~provos/libevent/doxygen-2.0.1/)
    Timer:
    libevent can also be used to create timers that invoke a callback after a certain amount of time has expired. The evtimer_set() function prepares an event struct to be used as a timer. To activate the timer, call evtimer_add(). Timers can be deactivated by calling evtimer_del().

    大意思是:
    libevent也能被用作一个“定时触发器”,当指定的时间到期时,能够回调指定的特定函数(比如上面的代码是回调event_handler,也就是说event_handler每个1秒就再回调一次自己)。evtimer_set()函数初始化一个timer,激活timer调用evtimer_add()函数,删除timer调用evtimer_del()函数。

    1.evtimer_set()函数原型:
    void evtimer_set(struct event ev, void(*)(evutil_socket_t, short, void *) cb, void *arg)
    该函数修改结构体ev,将回调函数cb,回调函数的参数arg赋值该结构体ev中的成员。

    也许看到这里你会有一个疑问:这是因为:
    #define evtimer_set(ev, cb, arg) event_set(ev, -1, 0, cb, arg)

    2.event_base_set函数原型:
    int event_base_set(struct event_base *eb, struct event *ev)
    Associate a different event base with an event.
    将一个event关联到一个不同的event base. 也就说我们可以将一个event关联到不同的event base.

    3.evtimer_add函数原型:
    int evtimer_add(struct event *ev, const struct timeval *timeout)
    Add an event to the set of monitored events. 将一个event加入到被监视的事件集合。
    ev an event struct initialized via event_set()
    timeout the maximum amount of time to wait for the event, or NULL to wait forever.

    4.evtimer_del函数原型:
    #define evtimer_del(ev) event_del(ev)
    so:
    int evtimer_del(struct event * ev)
    Delete a timer event.
    ev the event struct to be disabled

    总结一下:
    1. 首先调用event_base_new(或者event_init,推荐调用前者),对libevent进行唯一的一次初始化。
    before using any of the functions in the library, you must call event_init() or event_base_new() to perform one-time initialization of the libevent library.

    2. 然后调用evtimer_set初始化一个struct event结构体,也就是将利用evtimer_set的参数(即回调函数和回调函数的参数)填充struct event 结构体。
    The evtimer_set() function prepares an event struct to be used as a timer。

    再调用evtimer_add()将被evtimer_set初始化的struct event结构体加入到被监视的集合中.
    To activate the timer, call evtimer_add().

    删除一个event调用evtimer_del()
    Timers can be deactivated by calling evtimer_del().

    3.最后调用event_base_loop()或者event_base_dispatch()或者event_dispatch(),推荐调用第一个,最后一个是非线程安全的版本。
    从而开始处理事件集合,开始对event集合进行监视monitor.
    Loop to process events. In order to process events, an application needs to call event_dispatch(). event_base_dispatch() is threadsafe event dispatching loop.
    event_base_loop() is a more flexible version of event_base_dispatch().

    注意带有base字样的函数是对全局的libevent进行操作的。

    转载于:https://www.cnblogs.com/xiao0913/p/5286495.html

    展开全文
  • stable的版本,开发完服务器端程序以后,发现libevent 1.4对于客户端程序的支持不尽如人意,于是手动写了一个tcp的客户端来发送http的协议。一切ok! 后来无意 中跑去官网上看了看,发现libevent 2.0有stable了...

    最近做ministored的时候用libevent来搭建基于http的框架,手头的库是去年从官网上下来的1.4 stable的版本,开发完服务器端程序以后,发现libevent 1.4对于客户端程序的支持不尽如人意,于是手动写了一个tcp的客户端来发送http的协议。一切ok!

    后来无意 中跑去官网上看了看,发现libevent 2.0有stable了,忍不住下了一个下来看看,make install之后开始了我的一天的悲剧之旅。安装完以后,发现Libevent的订阅邮件里面有人写了一个小的倒子,拿下来一试,居然发现编译通不过。 在gcc的提示下,很快的清除了各种问题,只剩下一个问题,提示我找不见struct evhttp_uri 中各成员的具体存储空间。一下子傻眼了,这个 struct evhttp_uri可是一个关键的结构体啊。我了个去,跑到libevent2的头文件里面,先看http.h,里面没有,只有一行声明, struct evhttp_uri,然后里面的各式方法里面包含了n多基于这个结构体的方法,而定义却是在http.c里面,找到了struct evhttp_uri的具体定义。那没错啊,提供的函数可用,那我自然能用。以为是代码混在一起了,于是单独写一个小的程序。

    #include <errno.h>
    #include <stdlib.h>
    #include <string.h>

    #include <event2/event.h>
    #include <event2/http.h>
    #include <event2/buffer.h>
    #include <event2/http_struct.h>


    int main(int argc,char * argv[]){

    char url[]="http://192.168.1.200:1314/?opt=get ";
    struct evhttp_uri *uri = evhttp_uri_parse(url);
    printf("%s\t%s\t%s\n",uri->host,uri->port,uri->query);
    }

    发现在gcc上还是通不过,整到这,一下子郁闷了。为啥示例程序这么写,我写的却过不了;头文件上也有相关的使用啊;难不成是c语言有什么特性我还不了解?

    想了一晚上,无解,发到水木的c论坛上,一位网友的回复一语惊醒梦中人。他之所以这么写就是不想让你直接引用他的成员,这里面具体内容的更改不影响到程序,里面应该有相应的函数来读写。于是重新跑去看http.h的头文件,tnnd,当时看了那么久,为啥偏偏对evhttp_uri_get***/evhttp_uri_set***这些函数视而不见了。

    唉,问题解决了,下次碰到同样的问题,一定不要太浮躁,要仔细揣摩下作者背后的意思!

    展开全文
  • libevent源码

    千次阅读 2010-09-17 11:30:00
    的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent 框架、对系统 I/O 多路复用机制的封装、信号管理、定时事件管理、缓冲区管理...

    1) 源码结构

    Libevent 的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent 框架、对系统 I/O 多路复用机制的封装、信号管理、定时事件管理、缓冲区管理、基本数据结构和基于 libevent的两个实用库等几个部分,有些部分可能就是一个源文件。
    (1)头文件
    主要就是 event.h:事件宏定义、接口函数声明,主要结构体 event 的声明;
    (2)内部头文件
    xxx-internal.h:内部数据结构和函数,对外不可见,以达到信息隐藏的目的;
    (3)libevent框架
    event.c:event 整体框架的代码实现;
    (4)对系统 I/O多路复用机制的封装
    epoll.c:对 epoll 的封装;
    select.c:对 select 的封装;
    devpoll.c:对 dev/poll 的封装;
    kqueue.c:对kqueue 的封装;
    (5)定时事件管理
    min-heap.h:其实就是一个以时间作为 key的小根堆结构;
    (6)信号管理
    signal.c:对信号事件的处理;
    (7)辅助功能函数
    evutil.h  和 evutil.c:一些辅助功能函数,包括创建 socket pair和一些时间操作函数:加、减和比较等。
    (8)日志
    log.h和 log.c:log 日志函数
    (9)缓冲区管理
    evbuffer.c 和buffer.c:libevent 对缓冲区的封装;
    (10)基本数据结构
    compat/sys 下的两个源文件: queue.h是 libevent 基本数据结构的实现,包括链表,双向链表,队列等;_libevent_time.h:一些用于时间操作的结构体定义、函数和宏定义;
    (11)实用网络库
         http 和evdns:是基于 libevent 实现的http 服务器和异步 dns 查询库;

     

     

    2) mem$d是如何使用libevent

    The tree was showed that how libevent was used in mem$d, also it is a scenario that how to use libevent in multi-thread, in mem$d, it uses main thread and worker threads mode, each thread has its own event base, doing its event loop to check the cared event. Each worker thread has a CQ, main thread will push task into CQ and send a notification to it, so the worker thread will get this notification, then start to process the task in CQ. The main thread use the round robin to select the work thread to do the task.

     

    详细参考:http://wenku.baidu.com/view/89aba04d2b160b4e767fcff1.html

    展开全文
  • libevent最新静态库

    2018-09-25 15:11:55
    该资源为已经编译好的libevent静态库以及头文件,编译环境为win10 VS2017,对于该库的使用,创建http https server可参考本账号博客文章。
  • libevent学习笔记五:libevent源代码文件组织结构 ...Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、...
  • libevent 初试

    2016-10-16 20:55:00
    一直就想用一下libevent库,直到今天才去码代码。用法在他的头文件里面写的很清楚,原理的话也不是很难,感谢作者做的工作! 今天做了几个探索: 实现自定义事件类型的设置与触发 尝试 setInterval 类似的功能 ...
  • libevent 文件结构

    2019-02-23 13:29:17
    libevent 文件结构 前言 在分析libevent之前, ...事件的头文件 event.h : 事件类型的宏定义, 接口函数的声明, 以及最重要的event, event_base以及evbueffer, bufferevent结构体, 其中evbuffer结构的功能在函数evbu...
  • qt_eventdispatcher_libevent 是基于 Libevent 的 Qt 事件调度器 特点 非常快速 支持Qt4和Qt5 不需要Qt的私有头文件 通过Qt4 和 Qt5 的事件调度,事件循环,...
  • libevent源码分析

    2017-07-18 10:19:21
    libevent源代码文件组织结构: 1)头文件: event.h —— 事件宏定义、接口函数声明,主要结构体event的声明; 2)内部头文件: xxx-internal.h —— 内部数据结构和函数,(对外不可见,信息隐藏); 3)...
  • [libevent]时间管理

    千次阅读 2015-04-22 10:09:05
    为了支持定时器,Libevent必须和系统时间打交道,这一部分的内容也比较简单,主要涉及到时间的加减辅助函数、时间缓存、时间校正和定时器堆的时间值调整等,主要在头文件evutil.h中。 初始化检测 Libevent在初始...
  • libevent - 定时器

    2016-01-05 16:44:43
    准备工作: ... 新建目录3rd,将编译生成的库文件(lib)及头文件(include)放在该目录下。  3. 打开我们的工程,将3rd/include添加到include目录,3rd/lib添加到库目录。  4. 在工程Linker中引入libeve
  • Libevent移植安卓

    2015-12-24 16:47:58
    libevent for Android 源代码准备 这里有下载地址:https://github.com/ventureresearch/libevent/archive/patches-2.0.zip 注释掉 放入 ...添加头文件 #ifdef WIN32 #else #in
  • windows下编译libevent

    2020-09-01 10:23:10
    下载libevent-2.1.11-stable.tar.gz包并解压 修改以下文件,添加宏定义 在以下3个文件开头添加“#define _WIN32_WINNT 0x0500” ...添加头文件引用 在minheap-internal.h,加入 #include "stdint.h" 不
  • VS2015下编译libevent

    千次阅读 2018-11-30 11:27:09
    libevent代码地址: https://github.com/libevent/libevent Party 1 编译32位 lib 打开vs2015 x86命令行 直接进入代码目录,输入 nmake /f Makefile....增加头文件libevent_core.lib libevent_extras.l...
  • Linux下编译libevent的指导可以参考《4、《Libevent中文帮助文档》学习笔记4:Linux下编译libevent》,完成编译、安装,生成so库后,其他程序即可依赖libevent的so库,使用libevent的功能。 由于没有通过prefix指定...
  • 1. libevent 在 memcached 中 libevent ...使用 libevent 需要包含头文件 event.h, 并且在 GCC 链接时需要使用选项 -levent 相关函数的函数原型: /* before using any of the functions in the library, *...
  • libevent源代码结构

    2014-07-21 11:58:41
    ——libevent源代码文件组织 ...Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系统I/O多路
  • libevent个人理解

    2017-12-05 15:18:00
    即在include目录下防止event.h等头文件,在这些头文件中只暴露struct的声明却不暴露其定义,对于如event_base等结构的操作均使用封装的函数进行,而这些封装的函数则定义在event.c中,event.c会包含event.h和event-...
  • libevent源码深度剖析四 ——libevent源代码文件组织 ...Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、
  • windows_libevent_SDK.zip

    2020-08-20 10:19:09
    libevent-2.1.12-stable Windows下编译的动态库,头文件。可在自己的C/C++代码中直接使用。本动态库编译时不包含opensll.
  • 追踪libevent-0.5

    2016-08-27 13:01:37
    首先在libevent.org下载libevent-0.5,解压找到event/下的test程序,打开源码 test-eof.c找到main中与目标函数相关的程序,首先是socketpair(),套接字相关,继续追,wirte()系统函数,继续追踪,找到第一个相关函数...
  • ——libevent源代码文件组织 ...Libevent的源代码虽然都在一层文件夹下面,但是其代码分类还是相当清晰的,主要可分为头文件、内部使用的头文件、辅助功能函数、日志、libevent框架、对系统I/O多路复用机制
  • libevent 与事件驱动

    2013-04-20 02:25:00
    今天早上到sourceforge.net 下载libevent的源码,下午看来一些头文件稍微理解一下流程 晚上把源码放到lxr 用浏览器看, 溯本求源 找到了2000 0.1版,竟然顺利编译用 ddd 调试一下 这里写点总结 libevent: 异步...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 135
精华内容 54
关键字:

libevent头文件