diff options
-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); }; |