summaryrefslogtreecommitdiff
path: root/src/managers/eventLoop/EventLoopTimer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/managers/eventLoop/EventLoopTimer.hpp')
-rw-r--r--src/managers/eventLoop/EventLoopTimer.hpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/managers/eventLoop/EventLoopTimer.hpp b/src/managers/eventLoop/EventLoopTimer.hpp
new file mode 100644
index 00000000..8865d29f
--- /dev/null
+++ b/src/managers/eventLoop/EventLoopTimer.hpp
@@ -0,0 +1,29 @@
+#pragma once
+
+#include <chrono>
+#include <functional>
+#include <optional>
+
+class CEventLoopTimer {
+ public:
+ CEventLoopTimer(std::optional<std::chrono::system_clock::duration> timeout, std::function<void(std::shared_ptr<CEventLoopTimer> self, void* data)> cb_, void* data_);
+
+ // if not specified, disarms.
+ // if specified, arms.
+ void updateTimeout(std::optional<std::chrono::system_clock::duration> timeout);
+
+ void cancel();
+ bool passed();
+
+ float leftUs();
+
+ bool cancelled();
+ // resets expires
+ void call(std::shared_ptr<CEventLoopTimer> self);
+
+ private:
+ std::function<void(std::shared_ptr<CEventLoopTimer> self, void* data)> cb;
+ void* data = nullptr;
+ std::optional<std::chrono::system_clock::time_point> expires;
+ bool wasCancelled = false;
+};