diff options
Diffstat (limited to 'src/KingSystem/Utils/Thread/ManagedTask.h')
| -rw-r--r-- | src/KingSystem/Utils/Thread/ManagedTask.h | 47 |
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 |
