libevent使用event_new和不使用的两种方法

写两个简单的demo,对照一下各自的方法

#include <sys/types.h>

#include <event2/event-config.h>

#include <sys/stat.h>
#ifndef _WIN32
#include <sys/queue.h>
#include <unistd.h>
#include <sys/time.h>
#else
#include <winsock2.h>
#include <windows.h>
#endif
#include <signal.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <event.h>
#include <event2/event.h>

int called = 0;

static void
signal_cb(evutil_socket_t fd, short event, void *arg)
{
    struct event *signal = arg;

    printf("signal_cb: got signal %d
", event_get_signal(signal));

    if (called >= 2)
        event_del(signal);

    called++;
}

int
main(int argc, char **argv)
{
    struct event signal_int;
    struct event_base* base;
#ifdef _WIN32
    WORD wVersionRequested;
    WSADATA wsaData;

    wVersionRequested = MAKEWORD(2, 2);

    (void) WSAStartup(wVersionRequested, &wsaData);
#endif

    /* Initalize the event library */
//     base = event_base_new();
// 
//     /* Initalize one event */
//     signal_int = evsignal_new(base, SIGINT, signal_cb, event_self_cbarg());
    event_init();
    event_set(&signal_int, SIGINT, EV_SIGNAL, signal_cb, (void *)&signal_int);
    event_add(&signal_int, NULL);

    event_dispatch();
    //event_free(signal_int);
    //event_base_free(base);

    return (0);
}
#include <sys/types.h>

#include <event2/event-config.h>

#include <sys/stat.h>
#ifndef _WIN32
#include <sys/queue.h>
#include <unistd.h>
#include <sys/time.h>
#else
#include <winsock2.h>
#include <windows.h>
#endif
#include <signal.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <event2/event.h>

int called = 0;

static void
signal_cb(evutil_socket_t fd, short event, void *arg)
{
	struct event *signal = arg;

	printf("signal_cb: got signal %d
", event_get_signal(signal));

	if (called >= 2)
		event_del(signal);

	called++;
}

int
main(int argc, char **argv)
{
	struct event *signal_int;
	struct event_base* base;
#ifdef _WIN32
	WORD wVersionRequested;
	WSADATA wsaData;

	wVersionRequested = MAKEWORD(2, 2);

	(void) WSAStartup(wVersionRequested, &wsaData);
#endif

	/* Initalize the event library */
	base = event_base_new();

	/* Initalize one event */
	signal_int = evsignal_new(base, SIGINT, signal_cb, event_self_cbarg());    //evsignal_new内部调用了event_new
    event_add(signal_int, NULL); 
    event_base_dispatch(base);
    event_free(signal_int);
    event_base_free(base); return (0);
}

  

原文地址:https://www.cnblogs.com/wangshaowei/p/9225045.html