diff options
Diffstat (limited to 'CruUI/timer.h')
-rw-r--r-- | CruUI/timer.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/CruUI/timer.h b/CruUI/timer.h new file mode 100644 index 00000000..1a512a44 --- /dev/null +++ b/CruUI/timer.h @@ -0,0 +1,49 @@ +#pragma once + + +#include "system_headers.h" +#include <functional> +#include <memory> +#include <map> +#include <optional> + +#include "base.h" +#include "application.h" + +namespace cru +{ + using TimerAction = std::function<void()>; + + class TimerManager : public Object + { + friend class cru::Application; + private: + static TimerManager* instance_; + + public: + static TimerManager* GetInstance(); + + public: + TimerManager(); + TimerManager(const TimerManager& other) = delete; + TimerManager(TimerManager&& other) = delete; + TimerManager& operator=(const TimerManager& other) = delete; + TimerManager& operator=(TimerManager&& other) = delete; + ~TimerManager() override; + + UINT_PTR CreateTimer(UINT microseconds, bool loop, const TimerAction& action); + void KillTimer(UINT_PTR id); + std::optional<TimerAction> GetAction(UINT_PTR id); + + private: + std::map<UINT_PTR, TimerAction> map_{}; + }; + + struct ITimerTask : virtual Interface + { + virtual void Cancel() = 0; + }; + + std::shared_ptr<ITimerTask> SetTimeout(double seconds, const TimerAction& action); + std::shared_ptr<ITimerTask> SetInterval(double seconds, const TimerAction& action); +} |