From 1dab244aaad8694ba37ef43caedd8c8ba0310c00 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 5 Nov 2018 20:54:48 +0800 Subject: ... --- src/timer.h | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) (limited to 'src/timer.h') diff --git a/src/timer.h b/src/timer.h index 9884e46a..0fac2cdd 100644 --- a/src/timer.h +++ b/src/timer.h @@ -2,23 +2,19 @@ #include "system_headers.h" -#include #include #include +#include +#include #include "base.h" -#include "application.h" namespace cru { + using TimerAction = std::function; + class TimerManager : public Object { - public: - static TimerManager* GetInstance() - { - return Application::GetInstance()->GetTimerManager(); - } - public: TimerManager() = default; TimerManager(const TimerManager& other) = delete; @@ -27,17 +23,36 @@ namespace cru TimerManager& operator=(TimerManager&& other) = delete; ~TimerManager() override = default; - UINT_PTR CreateTimer(UINT milliseconds, bool loop, ActionPtr action); + UINT_PTR CreateTimer(UINT milliseconds, bool loop, const TimerAction& action); void KillTimer(UINT_PTR id); - ActionPtr GetAction(UINT_PTR id); + std::optional> GetAction(UINT_PTR id); private: - std::map map_{}; + std::map> map_{}; UINT_PTR current_count_ = 0; }; - using TimerTask = CancelablePtr; + class TimerTask + { + friend TimerTask SetTimeout(std::chrono::milliseconds milliseconds, const TimerAction& action); + friend TimerTask SetInterval(std::chrono::milliseconds milliseconds, const TimerAction& action); + + private: + explicit TimerTask(UINT_PTR id); + + public: + TimerTask(const TimerTask& other) = default; + TimerTask(TimerTask&& other) = default; + TimerTask& operator=(const TimerTask& other) = default; + TimerTask& operator=(TimerTask&& other) = default; + ~TimerTask() = default; + + void Cancel(); + + private: + UINT_PTR id_; + }; - TimerTask SetTimeout(std::chrono::milliseconds milliseconds, ActionPtr action); - TimerTask SetInterval(std::chrono::milliseconds milliseconds, ActionPtr action); + TimerTask SetTimeout(std::chrono::milliseconds milliseconds, const TimerAction& action); + TimerTask SetInterval(std::chrono::milliseconds milliseconds, const TimerAction& action); } -- cgit v1.2.3