diff options
author | crupest <crupest@outlook.com> | 2018-11-05 20:54:48 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2018-11-05 20:54:48 +0800 |
commit | 1dab244aaad8694ba37ef43caedd8c8ba0310c00 (patch) | |
tree | f70f6489a0f88520a0bdc095cd9713d03f83687b /src/timer.h | |
parent | 252519effe30881825dd02e26dc41bd9cde34782 (diff) | |
download | cru-1dab244aaad8694ba37ef43caedd8c8ba0310c00.tar.gz cru-1dab244aaad8694ba37ef43caedd8c8ba0310c00.tar.bz2 cru-1dab244aaad8694ba37ef43caedd8c8ba0310c00.zip |
...
Diffstat (limited to 'src/timer.h')
-rw-r--r-- | src/timer.h | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/src/timer.h b/src/timer.h index 9884e46a..0fac2cdd 100644 --- a/src/timer.h +++ b/src/timer.h @@ -2,24 +2,20 @@ #include "system_headers.h" -#include <memory> #include <map> #include <chrono> +#include <functional> +#include <optional> #include "base.h" -#include "application.h" namespace cru { + using TimerAction = std::function<void()>; + class TimerManager : public Object { public: - static TimerManager* GetInstance() - { - return Application::GetInstance()->GetTimerManager(); - } - - public: TimerManager() = default; TimerManager(const TimerManager& other) = delete; TimerManager(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<std::pair<bool, TimerAction>> GetAction(UINT_PTR id); private: - std::map<UINT_PTR, ActionPtr> map_{}; + std::map<UINT_PTR, std::pair<bool, TimerAction>> 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); } |