aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/thread/TaskRunner.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/thread/TaskRunner.cpp')
-rw-r--r--src/core/thread/TaskRunner.cpp27
1 files changed, 12 insertions, 15 deletions
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<QPointer<Task>, Task::TaskTrigger> RegisterTask(
- const QString& name, const Task::TaskRunnable& runnerable,
- const Task::TaskCallback& cb, DataObjectPtr params) {
- auto raw_task = SecureCreateQSharedObject<Task>(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<Task> 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<QString, QSharedPointer<Task>> pending_tasks_;
+ QMap<QString, Task*> pending_tasks_;
};
TaskRunner::TaskRunner() : p_(SecureCreateUniqueObject<Impl>()) {}
@@ -145,9 +141,10 @@ auto TaskRunner::GetThread() -> QThread* { return p_.get(); }
auto TaskRunner::IsRunning() -> bool { return p_->isRunning(); }
-std::tuple<QPointer<Task>, 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