Libevent示例程序3 定时器程序续

来源:互联网 发布:seo基础视频教程 编辑:程序博客网 时间:2024/05/18 20:51

#include <sys/types.h>    #include <event2/event-config.h>    #include <sys/stat.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 void timeout_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);      }  }    int main(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;      }        /* Initalize the event library初始化程序库 */      base = event_base_new();        /* Initalize one event,初始化一个event,注意在这里如何传递参数的 */      event_assign(&timeout, base, -1, flags, timeout_cb, (void*) &timeout);        evutil_timerclear(&tv);      tv.tv_sec = 2;      /* 添加一个event */      event_add(&timeout, &tv);        evutil_gettimeofday(&lasttime, NULL);        /* 开始运行 */      event_base_dispatch(base);        return (0);  }

shenhuayu@shenhuayu-VirtualBox ~/libevent $ gcc test.c -g -o mytest -levent

shenhuayu@shenhuayu-VirtualBox ~/libevent $ ./mytest
timeout_cb called at 1403256637: 2.001 seconds elapsed.
timeout_cb called at 1403256639: 2.002 seconds elapsed.
timeout_cb called at 1403256641: 2.002 seconds elapsed.
timeout_cb called at 1403256643: 2.002 seconds elapsed.
timeout_cb called at 1403256645: 2.002 seconds elapsed.
timeout_cb called at 1403256647: 2.002 seconds elapsed.
timeout_cb called at 1403256649: 2.002 seconds elapsed.
timeout_cb called at 1403256651: 2.003 seconds elapsed.
timeout_cb called at 1403256653: 2.003 seconds elapsed.
timeout_cb called at 1403256655: 2.002 seconds elapsed.
timeout_cb called at 1403256657: 2.002 seconds elapsed.
timeout_cb called at 1403256659: 2.002 seconds elapsed.
timeout_cb called at 1403256661: 2.003 seconds elapsed.
timeout_cb called at 1403256663: 2.003 seconds elapsed.
timeout_cb called at 1403256665: 2.003 seconds elapsed.
^C

0 0