diff options
Diffstat (limited to 'src/KingSystem/Utils/Thread')
| -rw-r--r-- | src/KingSystem/Utils/Thread/Task.cpp | 18 | ||||
| -rw-r--r-- | src/KingSystem/Utils/Thread/Task.h | 2 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/KingSystem/Utils/Thread/Task.cpp b/src/KingSystem/Utils/Thread/Task.cpp index 7ab00b55..7a3c3cff 100644 --- a/src/KingSystem/Utils/Thread/Task.cpp +++ b/src/KingSystem/Utils/Thread/Task.cpp @@ -84,11 +84,8 @@ bool Task::submitRequest(TaskRequest& request) { request.mQueue = mQueue; } mUserData = request.mUserData; - if (auto* delegate = request.mDelegate) { - deleteDelegate_(); - mFlags.set(Flag::DoNotDeleteDelegate); - mDelegate = delegate; - } + if (request.mDelegate) + setDelegateInternal_(request.mDelegate); mRemoveCallback = request.mRemoveCallback; mPostRunCallback = request.mPostRunCallback; mName = request.mName; @@ -126,6 +123,17 @@ bool Task::canSubmitRequest() const { return run_finished_on_current_thread || cond2; } +void Task::setUserData(void* user_data) { + mUserData = user_data; +} + +bool Task::setDelegateInternal_(TaskDelegate* delegate) { + deleteDelegate_(); + mFlags.set(Flag::DoNotDeleteDelegate); + mDelegate = delegate; + return delegate != nullptr; +} + void Task::processOnCurrentThreadDirectly(TaskThread* thread) { { TaskQueueLock lock{thread}; diff --git a/src/KingSystem/Utils/Thread/Task.h b/src/KingSystem/Utils/Thread/Task.h index 3f076d0b..4a5aba2b 100644 --- a/src/KingSystem/Utils/Thread/Task.h +++ b/src/KingSystem/Utils/Thread/Task.h @@ -150,7 +150,9 @@ protected: virtual void preRemove_() {} virtual void postRemove_() {} + bool setDelegateInternal_(TaskDelegate* delegate); void setLaneId(u8 id); + void setUserData(void* user_data); void setThread(TaskThread* thread); void setStatusPushed(); void setStatusFetched(); |
