QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsproxyprogresstask.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsproxyprogresstask.cpp
3 ------------------------
4 begin : August 2018
5 copyright : (C) 2018 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
19#include "qgsapplication.h"
20#include <QThreadPool>
21
22QgsProxyProgressTask::QgsProxyProgressTask( const QString &description, bool canCancel )
23 : QgsTask( description, canCancel ? QgsTask::CanCancel : QgsTask::Flags() )
24{
25}
26
28{
29 const QMutexLocker lock( &mNotFinishedMutex );
30 mAlreadyFinished = true;
31
32 mResult = result;
33 mNotFinishedWaitCondition.wakeAll();
34}
35
37{
38 QgsApplication::taskManager()->threadPool()->releaseThread();
39 mNotFinishedMutex.lock();
40 if ( !mAlreadyFinished )
41 {
42 mNotFinishedWaitCondition.wait( &mNotFinishedMutex );
43 }
44 mNotFinishedMutex.unlock();
45
46 QgsApplication::taskManager()->threadPool()->reserveThread();
47 return mResult;
48}
49
51{
52 QMetaObject::invokeMethod( this, "setProgress", Qt::AutoConnection, Q_ARG( double, progress ) );
53}
54
56{
57 emit canceled();
58
60}
61
62//
63// QgsScopedProxyProgressTask
64//
65
67 : mTask( new QgsProxyProgressTask( description ) )
68{
70}
71
73{
74 mTask->finalize( true );
75}
76
78{
79 mTask->setProxyProgress( progress );
80}
static QgsTaskManager * taskManager()
Returns the application's task manager, used for managing application wide background task handling.
A QgsTask shell which proxies progress reports.
void setProxyProgress(double progress)
Sets the progress (from 0 to 100) for the proxied operation.
void finalize(bool result)
Finalizes the task, with the specified result.
void canceled()
Emitted when the task is canceled.
void cancel() override
Notifies the task that it should terminate.
bool run() override
Performs the task's operation.
QgsProxyProgressTask(const QString &description, bool canCancel=false)
Constructor for QgsProxyProgressTask, with the specified description.
void setProgress(double progress)
Sets the progress (from 0 to 100) for the proxied operation.
QgsScopedProxyProgressTask(const QString &description)
Constructor for QgsScopedProxyProgressTask, with the specified description.
QThreadPool * threadPool()
Returns the threadpool utilized by the task manager.
long addTask(QgsTask *task, int priority=0)
Adds a task to the manager.
Abstract base class for long running background tasks.
double progress() const
Returns the task's progress (between 0.0 and 100.0)
QFlags< Flag > Flags
virtual void cancel()
Notifies the task that it should terminate.