libevent2のタイマー

libeventのバージョン2系では,バージョン1系の時と幾ばくか御作法が異なっていた.バージョン2系でのタイマーは以下のようにするらしい.バージョン1系のときは,event_baseは指定する必要はなかったけれど,バージョン2系では指定する必要があり,さらに,event_setがなくなったっぽい.

3秒後にhello world!を表示するプログラム.

#include <stdio.h>
#include <event.h>

void
hello(evutil_socket_t fd, short events, void *arg)
{
        printf("hello world!\n");
}

int
main(int argc, char *argv[])
{
        struct event_base *ev_base;
        struct event *ev;
        struct timeval tval;

        ev_base = event_base_new();

        ev = evtimer_new(ev_base, hello, NULL);

        tval.tv_sec  = 3;
        tval.tv_usec = 0;

        evtimer_add(ev, &tval);

        event_base_dispatch(ev_base);

        event_free(ev);
        event_base_free(ev_base);

        return 0;
}

この例ではevtimer_newを使っているけれど,自前でevent構造体をアロケートした場合はevtimer_assignを使うようだ.libeventは使いやすいけれどexampleが少なすぎる.