I'm currently trying to use libevent to call a function every n minutes / an event trigger that would call the function and was suggested that libevent can be used. I could use it persistently call the function every n seconds but was unable to figure how to pass arguments to them.
#include <stdio.h>
#include <sys/time.h>
#include <event.h>
void say_hello(int fd, short event, void *arg)
{
printf("Hello\n");
// printf("%d", (int *)arg[0])
}
int main(int argc, const char* argv[])
{
struct event ev;
struct timeval tv;
tv.tv_sec = 3;
tv.tv_usec = 0;
event_init();
// event_set(&my_event, 0, EV_PERSIST, my_function, NULL);
event_set(&ev, 0, EV_PERSIST, say_hello, NULL);
// evtimer_set(&ev, say_hello, NULL);
evtimer_add(&ev, &tv);
event_dispatch();
return 0;
}
event_set
is deprecated, instead, use event_new
:
struct event *event_new(
struct event_base *,
evutil_socket_t,
short,
event_callback_fn,
void *
)
The last parameter is an argument to be passed:
Parameters
base the event base to which the event should be attached.
fd the file descriptor or signal to be monitored, or -1.
events desired events to monitor: bitfield of EV_READ, EV_WRITE, EV_SIGNAL, EV_PERSIST, EV_ET.
callback callback function to be invoked when the event occurs
callback_arg an argument to be passed to the callback function
To schedule the execution of the event specified in event_new()
use event_add()
, his prototype is:
int event_add(
struct event *ev,
const struct timeval *timeout
)