From 5adbd09fcb24f829ee110a5d387269aee13c558c Mon Sep 17 00:00:00 2001 From: saturneric Date: Tue, 16 Jan 2024 02:01:59 +0800 Subject: feat: upgrade threading system and make it clearer --- src/core/thread/TaskRunner.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'src/core/thread/TaskRunner.cpp') diff --git a/src/core/thread/TaskRunner.cpp b/src/core/thread/TaskRunner.cpp index 19587e70..8e381384 100644 --- a/src/core/thread/TaskRunner.cpp +++ b/src/core/thread/TaskRunner.cpp @@ -50,29 +50,25 @@ class TaskRunner::Impl : public QThread { task->SafelyRun(); } - std::tuple, Task::TaskTrigger> RegisterTask( - const QString& name, const Task::TaskRunnable& runnerable, - const Task::TaskCallback& cb, DataObjectPtr params) { - auto raw_task = SecureCreateQSharedObject(runnerable, name, - std::move(params), cb); + auto RegisterTask(const QString& name, const Task::TaskRunnable& runnerable, + const Task::TaskCallback& cb, DataObjectPtr params) + -> Task::TaskHandler { + auto* raw_task = new Task(runnerable, name, std::move(params), cb); raw_task->setParent(nullptr); raw_task->moveToThread(this); - connect(raw_task.get(), &Task::SignalRun, this, [this, raw_task]() { + connect(raw_task, &Task::SignalRun, this, [this, raw_task]() { pending_tasks_[raw_task->GetFullID()] = raw_task; }); - connect(raw_task.get(), &Task::SignalTaskEnd, this, [this, raw_task]() { + connect(raw_task, &Task::SignalTaskEnd, this, [this, raw_task]() { pending_tasks_.remove(raw_task->GetFullID()); }); GF_CORE_LOG_TRACE("runner starts task: {} at thread: {}", raw_task->GetFullID(), this->currentThreadId()); - QPointer const task = raw_task.get(); - return {nullptr, [task]() { - if (task != nullptr) task->SafelyRun(); - }}; + return Task::TaskHandler(raw_task); } void PostTask(const QString& name, const Task::TaskRunnable& runnerable, @@ -108,7 +104,7 @@ class TaskRunner::Impl : public QThread { } private: - QMap> pending_tasks_; + QMap pending_tasks_; }; TaskRunner::TaskRunner() : p_(SecureCreateUniqueObject()) {} @@ -145,9 +141,10 @@ auto TaskRunner::GetThread() -> QThread* { return p_.get(); } auto TaskRunner::IsRunning() -> bool { return p_->isRunning(); } -std::tuple, Task::TaskTrigger> TaskRunner::RegisterTask( - const QString& name, const Task::TaskRunnable& runnable, - const Task::TaskCallback& cb, DataObjectPtr p_pbj) { +auto TaskRunner::RegisterTask(const QString& name, + const Task::TaskRunnable& runnable, + const Task::TaskCallback& cb, DataObjectPtr p_pbj) + -> Task::TaskHandler { return p_->RegisterTask(name, runnable, cb, p_pbj); } } // namespace GpgFrontend::Thread -- cgit v1.2.3