time-test例子是libevent自带的一个例子,通过libevent提供的定时事件来实现,间隔固定时间打印的功能。
1 /* 2 * gcc -g -o time-test time-test.c -levent_core 3 */ 4 5 #include <sys/types.h> 6 #include <event2/event-config.h> 7 #include <sys/stat.h> 8 #include <unistd.h> 9 #include <time.h> 10 #include <sys/time.h> 11 #include <fcntl.h> 12 13 #include <stdlib.h> 14 #include <stdio.h> 15 #include <string.h> 16 #include <errno.h> 17 18 #include <event2/event.h> 19 #include <event2/event_struct.h> 20 #include <event2/util.h> 21 22 struct timeval lasttime; 23 int event_is_persistent; 24 25 static void timeout_cb(evutil_socket_t fd, short event, void *arg) 26 { 27 struct timeval newtime, difference; 28 struct event *timeout = arg; 29 double elapsed; 30 31 evutil_gettimeofday(&newtime, NULL); 32 evutil_timersub(&newtime, &lasttime, &difference); 33 elapsed = difference.tv_sec + (difference.tv_usec / 1.0e6); 34 35 printf("timeout_cb called at %d: %.3f seconds elapsed.\n", (int)newtime.tv_sec, elapsed); 36 lasttime = newtime; 37 38 if (!event_is_persistent) 39 { 40 struct timeval tv; 41 evutil_timerclear(&tv); 42 tv.tv_sec = 2; 43 event_add(timeout, &tv); 44 } 45 } 46 47 int main(int argc, char **argv) 48 { 49 struct event timeout; 50 struct timeval tv; 51 struct event_base *base; 52 int flags; 53 54 if (argc == 2 && strcmp(argv[1], "-p")) 55 { 56 event_is_persistent = 1; 57 flags = EV_PERSIST; 58 } 59 else 60 { 61 event_is_persistent = 0; 62 flags = 0; 63 } 64 65 /* Initalize the event library */ 66 base = event_base_new(); 67 68 /* Initalize one event */ 69 event_assign(&timeout, base, -1, flags, timeout_cb, (void*)&timeout); 70 71 evutil_timerclear(&tv); 72 tv.tv_sec = 20; 73 event_add(&timeout, &tv); 74 75 evutil_gettimeofday(&lasttime, NULL); 76 event_base_dispatch(base); 77 78 return 0; 79 }