summaryrefslogtreecommitdiff
path: root/src/KingSystem/Utils/Thread/ManagedTask.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/KingSystem/Utils/Thread/ManagedTask.h')
-rw-r--r--src/KingSystem/Utils/Thread/ManagedTask.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/KingSystem/Utils/Thread/ManagedTask.h b/src/KingSystem/Utils/Thread/ManagedTask.h
new file mode 100644
index 00000000..67b8ef04
--- /dev/null
+++ b/src/KingSystem/Utils/Thread/ManagedTask.h
@@ -0,0 +1,47 @@
+#pragma once
+
+#include "KingSystem/Utils/Thread/Task.h"
+#include "KingSystem/Utils/Types.h"
+
+namespace ksys::util {
+
+class ManagedTaskHandle;
+class TaskMgr;
+
+class ManagedTask : public Task {
+ SEAD_RTTI_OVERRIDE(ManagedTask, Task)
+public:
+ explicit ManagedTask(sead::Heap* heap);
+ explicit ManagedTask(sead::IDisposer::HeapNullOption heap_null_option);
+ ~ManagedTask() override;
+
+ bool isIdle() const;
+
+protected:
+ friend class ManagedTaskHandle;
+ friend class TaskMgr;
+
+ void setMgr(TaskMgr* mgr);
+ void attachHandle(ManagedTaskHandle* handle, TaskQueueBase* queue);
+ void detachHandle();
+
+ void prepare_(TaskRequest* request) override;
+ void run_() override;
+ void onRunFinished_() override;
+ void onFinish_() override;
+ void onPostFinish_() override;
+ void preRemove_() override;
+ void postRemove_() override;
+
+ virtual void onRun_();
+ virtual void prepareImpl_(TaskRequest* req);
+ virtual void preRemoveImpl_();
+
+ bool mIsIdle = true;
+ TaskMgr* mMgr = nullptr;
+ // FIXME: rename
+ ManagedTaskHandle* mHandle = nullptr;
+};
+KSYS_CHECK_SIZE_NX150(ManagedTask, 0xc0);
+
+} // namespace ksys::util