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 }
View Code

相关文章: