summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2017-01-29 14:49:28 +0000
committerSean Harmer <sean.harmer@kdab.com>2017-05-22 06:58:43 +0000
commit228b619197b2b6b97277effff248b160e7d0e3a7 (patch)
treefc2a0d1037b04bb43b55a0fd9cb18365320fb0bb
parentab0f38728cda3a5c819de6172febb0908c101967 (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.cpp17
-rw-r--r--src/core/aspects/qabstractaspect.h2
-rw-r--r--src/core/aspects/qabstractaspect_p.h5
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);
};