diff options
author | Mike Krus <mike.krus@kdab.com> | 2017-01-29 14:49:28 +0000 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-05-22 06:58:43 +0000 |
commit | 228b619197b2b6b97277effff248b160e7d0e3a7 (patch) | |
tree | fc2a0d1037b04bb43b55a0fd9cb18365320fb0bb | |
parent | ab0f38728cda3a5c819de6172febb0908c101967 (diff) |
Add support for single shot jobs
QAbstractAspect includes a list of jobs that will only be run once.
The list is added in jobsToExecute and then cleared.
Change-Id: I5849c643a06d8e4e81bbc55d610851de05087934
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/core/aspects/qabstractaspect.cpp | 17 | ||||
-rw-r--r-- | src/core/aspects/qabstractaspect.h | 2 | ||||
-rw-r--r-- | src/core/aspects/qabstractaspect_p.h | 5 |
3 files changed, 23 insertions, 1 deletions
diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp index 710522356..d7e62db68 100644 --- a/src/core/aspects/qabstractaspect.cpp +++ b/src/core/aspects/qabstractaspect.cpp @@ -290,7 +290,15 @@ QAbstractAspectJobManager *QAbstractAspectPrivate::jobManager() const QVector<QAspectJobPtr> QAbstractAspectPrivate::jobsToExecute(qint64 time) { Q_Q(QAbstractAspect); - return q->jobsToExecute(time); + auto res = q->jobsToExecute(time); + + { + QMutexLocker lock(&m_singleShotMutex); + res << m_singleShotJobs; + m_singleShotJobs.clear(); + } + + return res; } /*! @@ -332,6 +340,13 @@ void QAbstractAspect::onEngineShutdown() { } +void QAbstractAspect::scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job) +{ + Q_D(QAbstractAspect); + QMutexLocker lock(&d->m_singleShotMutex); + d->m_singleShotJobs.push_back(job); +} + namespace Debug { AsynchronousCommandReply::AsynchronousCommandReply(const QString &commandName, QObject *parent) diff --git a/src/core/aspects/qabstractaspect.h b/src/core/aspects/qabstractaspect.h index 66f0bdc24..8ac1b251f 100644 --- a/src/core/aspects/qabstractaspect.h +++ b/src/core/aspects/qabstractaspect.h @@ -68,6 +68,8 @@ public: explicit QAbstractAspect(QObject *parent = nullptr); ~QAbstractAspect(); + void scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job); + protected: explicit QAbstractAspect(QAbstractAspectPrivate &dd, QObject *parent = nullptr); diff --git a/src/core/aspects/qabstractaspect_p.h b/src/core/aspects/qabstractaspect_p.h index e64970649..a6c47c494 100644 --- a/src/core/aspects/qabstractaspect_p.h +++ b/src/core/aspects/qabstractaspect_p.h @@ -61,6 +61,9 @@ #include <Qt3DCore/private/qt3dcore_global_p.h> #include <QtCore/private/qobject_p.h> +#include <QMutex> +#include <QVector> + QT_BEGIN_NAMESPACE namespace Qt3DCore { @@ -137,6 +140,8 @@ public: QAbstractAspectJobManager *m_jobManager; QChangeArbiter *m_arbiter; QHash<const QMetaObject*, QBackendNodeMapperPtr> m_backendCreatorFunctors; + QMutex m_singleShotMutex; + QVector<QAspectJobPtr> m_singleShotJobs; static QAbstractAspectPrivate *get(QAbstractAspect *aspect); }; |