#include "util/timer/timer.h" #include "loop.h" bool nn_event_loop_init(struct nn_event_loop *loop) { loop->ev = ev_default_loop(EVFLAG_AUTO); //loop->ev = ev_loop_new(EVFLAG_AUTO); // @TODO: // https://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod @ EVBACKEND_SELECT //ev_set_timeout_collect_interval(loop->ev, 0.1); //ev_set_io_collect_interval(loop->ev, 0.003); return true; } s32 nn_event_loop_run(struct nn_event_loop *loop) { return ev_run(loop->ev, 0); } s32 nn_event_loop_run_once(struct nn_event_loop *loop) { return ev_run(loop->ev, EVRUN_ONCE | EVRUN_NOWAIT); } void nn_event_loop_sleep(struct nn_event_loop *loop, nn_os_tstamp delay) { al_assert(delay >= NNWT_TS_FROM_USEC(1000)); u64 prev = nn_get_timestamp(), now; while (delay >= 0.0) { nn_event_loop_run_once(loop); nn_thread_sleep(NNWT_TS_FROM_USEC(1000)); now = nn_get_timestamp(); delay -= NNWT_TS_FROM_USEC(now - prev); prev = now; } } void nn_event_loop_break_one(struct nn_event_loop *loop) { ev_break(loop->ev, EVBREAK_ONE); } void nn_event_loop_break(struct nn_event_loop *loop) { ev_break(loop->ev, EVBREAK_ALL); } void nn_event_loop_destroy(struct nn_event_loop *loop) { ev_loop_destroy(loop->ev); loop->ev = NULL; }