summaryrefslogtreecommitdiff
path: root/event_loop.h
diff options
context:
space:
mode:
Diffstat (limited to 'event_loop.h')
-rw-r--r--event_loop.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/event_loop.h b/event_loop.h
new file mode 100644
index 0000000..003c3d8
--- /dev/null
+++ b/event_loop.h
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2020, Google Inc.
+ *
+ * event_loop.h - Event loop based on cam's
+ */
+#ifndef __SIMPLE_CAM_EVENT_LOOP_H__
+#define __SIMPLE_CAM_EVENT_LOOP_H__
+
+#include <atomic>
+#include <functional>
+#include <list>
+#include <mutex>
+
+struct event_base;
+
+class EventLoop
+{
+public:
+ EventLoop();
+ ~EventLoop();
+
+ void exit(int code = 0);
+ int exec();
+
+ void timeout(unsigned int sec);
+ void callLater(const std::function<void()> &func);
+
+private:
+ static EventLoop *instance_;
+
+ static void timeoutTriggered(int fd, short event, void *arg);
+
+ struct event_base *event_;
+ std::atomic<bool> exit_;
+ int exitCode_;
+
+ std::list<std::function<void()>> calls_;
+ std::mutex lock_;
+
+ void interrupt();
+ void dispatchCalls();
+};
+
+#endif /* __SIMPLE_CAM_EVENT_LOOP_H__ */