Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-17 09:24:55

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:default
0004 
0005 #ifndef QFUTURESYNCHRONIZER_H
0006 #define QFUTURESYNCHRONIZER_H
0007 
0008 #include <QtCore/qfuture.h>
0009 
0010 QT_REQUIRE_CONFIG(future);
0011 
0012 QT_BEGIN_NAMESPACE
0013 
0014 
0015 template <typename T>
0016 class QFutureSynchronizer
0017 {
0018     Q_DISABLE_COPY(QFutureSynchronizer)
0019 
0020 public:
0021     Q_NODISCARD_CTOR QFutureSynchronizer() : m_cancelOnWait(false) { }
0022     Q_NODISCARD_CTOR_X("Use future.waitForFinished() instead.")
0023     explicit QFutureSynchronizer(QFuture<T> future)
0024         : m_cancelOnWait(false)
0025     { addFuture(std::move(future)); }
0026     ~QFutureSynchronizer()  { waitForFinished(); }
0027 
0028     void setFuture(QFuture<T> future)
0029     {
0030         waitForFinished();
0031         m_futures.clear();
0032         addFuture(std::move(future));
0033     }
0034 
0035     void addFuture(QFuture<T> future)
0036     {
0037         m_futures.append(std::move(future));
0038     }
0039 
0040     void waitForFinished()
0041     {
0042         if (m_cancelOnWait) {
0043             for (int i = 0; i < m_futures.size(); ++i) {
0044                  m_futures[i].cancel();
0045             }
0046         }
0047 
0048         for (int i = 0; i < m_futures.size(); ++i) {
0049              m_futures[i].waitForFinished();
0050          }
0051     }
0052 
0053     void clearFutures()
0054     {
0055         m_futures.clear();
0056     }
0057 
0058     QList<QFuture<T> > futures() const
0059     {
0060         return m_futures;
0061     }
0062 
0063     void setCancelOnWait(bool enabled)
0064     {
0065         m_cancelOnWait = enabled;
0066     }
0067 
0068     bool cancelOnWait() const
0069     {
0070         return m_cancelOnWait;
0071     }
0072 
0073 protected:
0074     QList<QFuture<T>> m_futures;
0075     bool m_cancelOnWait;
0076 };
0077 
0078 QT_END_NAMESPACE
0079 
0080 #endif // QFUTURESYNCHRONIZER_H