From c1f4f1fdb64d97b5c3461723a8482ca64efea30e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 7 Aug 2013 22:16:59 +0200 Subject: EventLoop: new implementation using epoll Implement an event loop without GLib. --- src/event/IdleMonitor.cxx | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/event/IdleMonitor.cxx') diff --git a/src/event/IdleMonitor.cxx b/src/event/IdleMonitor.cxx index 1ee86f7f5..c99c66b26 100644 --- a/src/event/IdleMonitor.cxx +++ b/src/event/IdleMonitor.cxx @@ -29,8 +29,13 @@ IdleMonitor::Cancel() if (!IsActive()) return; +#ifdef USE_EPOLL + active = false; + loop.RemoveIdle(*this); +#else g_source_remove(source_id); source_id = 0; +#endif } void @@ -42,19 +47,32 @@ IdleMonitor::Schedule() /* already scheduled */ return; +#ifdef USE_EPOLL + active = true; + loop.AddIdle(*this); +#else source_id = loop.AddIdle(Callback, this); +#endif } void IdleMonitor::Run() { assert(loop.IsInside()); + +#ifdef USE_EPOLL + assert(active); + active = false; +#else assert(source_id != 0); source_id = 0; +#endif OnIdle(); } +#ifndef USE_EPOLL + gboolean IdleMonitor::Callback(gpointer data) { @@ -62,3 +80,5 @@ IdleMonitor::Callback(gpointer data) monitor.Run(); return false; } + +#endif -- cgit v1.2.3