aboutsummaryrefslogtreecommitdiff
path: root/src/timer.h
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2018-09-25 13:37:33 +0800
committercrupest <crupest@outlook.com>2018-09-25 13:37:33 +0800
commitccbc293c0158d4450c0db344474193f17925403f (patch)
tree1ecde3132b3299ab2f272f541a76bced67f983b1 /src/timer.h
parent184c3b2b39d3fa34f9349a7d7fbebe49bc62f7fc (diff)
parentea4b0966d8eb5a8e76dfbe4d833a07a4797a3284 (diff)
downloadcru-ccbc293c0158d4450c0db344474193f17925403f.tar.gz
cru-ccbc293c0158d4450c0db344474193f17925403f.tar.bz2
cru-ccbc293c0158d4450c0db344474193f17925403f.zip
Merge branch 'master' into issue4-dev
Diffstat (limited to 'src/timer.h')
-rw-r--r--src/timer.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/timer.h b/src/timer.h
new file mode 100644
index 00000000..9884e46a
--- /dev/null
+++ b/src/timer.h
@@ -0,0 +1,43 @@
+#pragma once
+
+
+#include "system_headers.h"
+#include <memory>
+#include <map>
+#include <chrono>
+
+#include "base.h"
+#include "application.h"
+
+namespace cru
+{
+ class TimerManager : public Object
+ {
+ public:
+ static TimerManager* GetInstance()
+ {
+ return Application::GetInstance()->GetTimerManager();
+ }
+
+ public:
+ TimerManager() = default;
+ TimerManager(const TimerManager& other) = delete;
+ TimerManager(TimerManager&& other) = delete;
+ TimerManager& operator=(const TimerManager& other) = delete;
+ TimerManager& operator=(TimerManager&& other) = delete;
+ ~TimerManager() override = default;
+
+ UINT_PTR CreateTimer(UINT milliseconds, bool loop, ActionPtr action);
+ void KillTimer(UINT_PTR id);
+ ActionPtr GetAction(UINT_PTR id);
+
+ private:
+ std::map<UINT_PTR, ActionPtr> map_{};
+ UINT_PTR current_count_ = 0;
+ };
+
+ using TimerTask = CancelablePtr;
+
+ TimerTask SetTimeout(std::chrono::milliseconds milliseconds, ActionPtr action);
+ TimerTask SetInterval(std::chrono::milliseconds milliseconds, ActionPtr action);
+}