php - Quel modèle d'événement la fonction event_* dans libevent utilise-t-elle ?
世界只因有你
世界只因有你 2017-05-16 13:06:51
0
1
525

Sachez que Libevent prend en charge le modèle temporel select/poll/epoll. Aujourd'hui, il m'est soudain venu à l'esprit que la série de fonctions event_* qui encapsule les opérations sous-jacentes de libevent utilise quel type de modèle d'événement

世界只因有你
世界只因有你

répondre à tous(1)
滿天的星座
<event.c>

#ifdef HAVE_EVENT_PORTS
extern const struct eventop evportops;
#endif
#ifdef HAVE_SELECT
extern const struct eventop selectops;
#endif
#ifdef HAVE_POLL
extern const struct eventop pollops;
#endif
#ifdef HAVE_EPOLL
extern const struct eventop epollops;
#endif
#ifdef HAVE_WORKING_KQUEUE
extern const struct eventop kqops;
#endif
#ifdef HAVE_DEVPOLL
extern const struct eventop devpollops;
#endif
#ifdef WIN32
extern const struct eventop win32ops;
#endif

/* In order of preference */
static const struct eventop *eventops[] = {
#ifdef HAVE_EVENT_PORTS
    &evportops,
#endif
#ifdef HAVE_WORKING_KQUEUE
    &kqops,
#endif
#ifdef HAVE_EPOLL
    &epollops,
#endif
#ifdef HAVE_DEVPOLL
    &devpollops,
#endif
#ifdef HAVE_POLL
    &pollops,
#endif
#ifdef HAVE_SELECT
    &selectops,
#endif
#ifdef WIN32
    &win32ops,
#endif
    NULL
};

Selon l'ordre ci-dessus, prenez la première interface prise en charge par os, et le processus d'initialisation est le suivant :

<event.c>

struct event_base *
event_base_new(void)
{
...    
    base->evbase = NULL;
    for (i = 0; eventops[i] && !base->evbase; i++) {
        base->evsel = eventops[i];

        base->evbase = base->evsel->init(base);
    }

    if (base->evbase == NULL)
        event_errx(1, "%s: no event mechanism available", __func__);

    ...
}

Ce qui suit est le package eventop d'epoll

epoll.c

const struct eventop epollops = {
    "epoll",
    epoll_init,
    epoll_add,
    epoll_del,
    epoll_dispatch,
    epoll_dealloc,
    1 /* need reinit */
};
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal