libevent例子:time-test.c

来源:互联网 发布:软件开发文档控制程序 编辑:程序博客网 时间:2024/05/16 14:26

测试时间,代码如下

#include <sys/types.h>#include <event2/event-config.h>#include <sys/stat.h>#include <sys/queue.h>#include <unistd.h>#include <time.h>#include <sys/time.h>#include <fcntl.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <event2/event.h>#include <event2/event_struct.h>#include <event2/util.h>struct timeval lasttime;int event_is_persistent;static voidtimeout_cb(evutil_socket_t fd, short event, void *arg){    struct timeval newtime, difference;    struct event *timeout = arg;    double elapsed;    evutil_gettimeofday(&newtime, NULL);    evutil_timersub(&newtime, &lasttime, &difference);    elapsed = difference.tv_sec +        (difference.tv_usec / 1.0e6);    printf("timeout_cb called at %d: %.3f seconds elapsed.\n",        (int)newtime.tv_sec, elapsed);    lasttime = newtime;    if (! event_is_persistent) {        struct timeval tv;        evutil_timerclear(&tv);        tv.tv_sec = 2;        event_add(timeout, &tv);    }}intmain(int argc, char **argv){    struct event timeout;    struct timeval tv;    struct event_base *base;    int flags;    if (argc == 2 && !strcmp(argv[1], "-p")) {        event_is_persistent = 1;        flags = EV_PERSIST;    } else {        event_is_persistent = 0;        flags = 0;    }    base = event_base_new();    event_assign(&timeout, base, -1, flags, timeout_cb, (void*) &timeout);    evutil_timerclear(&tv);    tv.tv_sec = 2;    event_add(&timeout, &tv);    evutil_gettimeofday(&lasttime, NULL);    event_base_dispatch(base);    return (0);}

比较下结果

[root@dl samples]$ ./a.outtimeout_cb called at 1494850350: 2.002 seconds elapsed.timeout_cb called at 1494850352: 2.002 seconds elapsed.timeout_cb called at 1494850354: 2.002 seconds elapsed.timeout_cb called at 1494850356: 2.002 seconds elapsed.timeout_cb called at 1494850358: 2.002 seconds elapsed.timeout_cb called at 1494850360: 2.002 seconds elapsed.^C[root@dl samples]$ ./a.out -ptimeout_cb called at 1494850365: 2.002 seconds elapsed.timeout_cb called at 1494850367: 2.000 seconds elapsed.timeout_cb called at 1494850369: 2.000 seconds elapsed.timeout_cb called at 1494850371: 2.000 seconds elapsed.timeout_cb called at 1494850373: 2.000 seconds elapsed.timeout_cb called at 1494850375: 1.999 seconds elapsed.timeout_cb called at 1494850377: 2.000 seconds elapsed.timeout_cb called at 1494850379: 2.000 seconds elapsed.timeout_cb called at 1494850381: 2.000 seconds elapsed.

./a.out:不持续触发,手动event_add
./a.out -p:持续触发超时事件
感觉像是测试event_add函数所耗费的时间。