diff options
Diffstat (limited to 'src/managers/eventLoop/EventLoopTimer.hpp')
| -rw-r--r-- | src/managers/eventLoop/EventLoopTimer.hpp | 29 |
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; +}; |
