diff --git a/python/core/qgstaskmanager.sip b/python/core/qgstaskmanager.sip index f6fc5231e0e..fda56ba16e6 100644 --- a/python/core/qgstaskmanager.sip +++ b/python/core/qgstaskmanager.sip @@ -187,6 +187,11 @@ class QgsTaskManager : QObject */ bool deleteTask( QgsTask* task ); + /** Deletes all tasks in the manager, first terminating them if they are currently + * running. + */ + void deleteAllTasks(); + /** Returns the task with matching ID. * @param id task ID * @returns task if found, or nullptr diff --git a/src/core/qgstaskmanager.cpp b/src/core/qgstaskmanager.cpp index 048f111700c..7bf980dfa65 100644 --- a/src/core/qgstaskmanager.cpp +++ b/src/core/qgstaskmanager.cpp @@ -184,7 +184,20 @@ bool QgsTaskManager::deleteTask( QgsTask *task ) return result; } -QgsTask*QgsTaskManager::task( long id ) const +void QgsTaskManager::deleteAllTasks() +{ + //first tell all tasks to cancel + cancelAll(); + + QMutexLocker ml( mTaskMutex ); + Q_FOREACH ( QgsTask* task, tasks() ) + { + deleteTask( task ); + } + emit allTasksFinished(); +} + +QgsTask* QgsTaskManager::task( long id ) const { QMutexLocker ml( mTaskMutex ); return mTasks.value( id ).task; diff --git a/src/core/qgstaskmanager.h b/src/core/qgstaskmanager.h index c1254272fe6..0516b1b5b0e 100644 --- a/src/core/qgstaskmanager.h +++ b/src/core/qgstaskmanager.h @@ -218,6 +218,11 @@ class CORE_EXPORT QgsTaskManager : public QObject */ bool deleteTask( QgsTask* task ); + /** Deletes all tasks in the manager, first terminating them if they are currently + * running. + */ + void deleteAllTasks(); + /** Returns the task with matching ID. * @param id task ID * @returns task if found, or nullptr