zoukankan      html  css  js  c++  java
  • libevent

    6. 线程安全

    libevent不是线程安全的,libevnet里网络io都是单线程里处理。

    其它线程调用event_base_loopexit 和 event_base_loopbreak 并不会使当前线程从event_base_dispatch返回。

    同理,其它线程调用bufferevent_free,可能引起异常。


    所以,event_base_loopexit 和 event_base_loopbreak 以及 bufferevent_free的调用仅限于当前主线程的读写事件回调中,若从其它线程对event_base和bufferevent进行操作,或者达不到预期的效果,或者引起主线程的异常。



    5. 开启循环

    函数原型:

    #define EVLOOP_ONCE             0x01
    #define EVLOOP_NONBLOCK         0x02
    #define EVLOOP_NO_EXIT_ON_EMPTY 0x04


    int event_base_loop(struct event_base *base, int flags);

    功能:开启监测,循环监测注册在此event_base上的事件

    同类函数:

    int event_base_dispatch(struct event_base *base);

    等于不设置任何标志的event_base_loop,一直运行,直至注册在上面的事件全部关闭,或调用event_base_loopexit和event_base_loopbreak跳出循环



    4. 停止循环

    函数原型:

    int event_base_loopexit(struct event_base *base, const struct timeval *tv);

    int event_base_loopbreak(struct event_base *base);



    3. 开关读写事件

    函数原型:

    void bufferevent_enable(struct bufferevent *bufev, short events);

    void bufferevent_disable(struct bufferevent *bufev, short events);


    同时可以调用如下函数

    short bufferevent_get_enabled(struct bufferevent *bufev);

    查看对应bufferevent上开启的事件类型



    2. 事件回调函数

    函数原型:typedef void (*bufferevent_event_cb)(struct bufferevent *bev, short events, void *ctx);



    1. 设置超时

    函数原型:void bufferevent_set_timeouts(

                                    struct bufferevent *bufev, 

                                    const struct timeval *timeout_read, 

                                    const struct timeval *timeout_write);

    参数:超时指针为NULL,表示对应操作无超时,同时抹除之前已设置的超时

    说明:相应操作未开启,则超时设置无意义,永不触发


    回调

    a. 指定的时间内,套接字上无数据到达,则触发读超时;写超时,暂未掌握

    b. 超时发生,则以BEV_EVENT_TIMEOUT|BEV_EVENT_READING 或 BEV_EVENT_TIMEOUT|BEV_EVENT_WRITING事件标志位调用事件回调函数bufferevent_event_cb

    c. 读写超时发生,则该bufferevent上对应的读操作或写操作自动失效,若想继续等待,需调用bufferevent_enable开启事件

  • 相关阅读:
    Git安装配置
    Openstack 错误日志查看方法
    keystone v3.0与2.0的区别
    Python远程调试Openstack
    openstack遇到的错误
    特别翔实的adaboost分类算法讲解 转的
    h5 html5 模拟时钟 页面
    js 面向对象 jquery 全局变量 封装
    HTML5 h5 微信 浮层 提示 点击右上角,从浏览器打开 pop.png
    jquery中ajax使用error调试错误的方法,实例分析了Ajax的使用方法与error函数调试错误的技巧
  • 原文地址:https://www.cnblogs.com/chaikefusibushiji/p/7475581.html
Copyright © 2011-2022 走看看