8#include <QtCore/qatomic.h>
9#include <QtCore/qthread.h>
10#include <QtCore/qvarlengtharray.h>
11#include <QtCore/private/qsimd_p.h>
12#include <private/qthreadpool_p.h>
30class ThreadPoolThreadReleaser {
36 ~ThreadPoolThreadReleaser()
37 {
if (m_pool) m_pool->reserveThread(); }
40const auto suspendingOrSuspended =
68 return a.fetchAndOrRelaxed(which) | which;
73 return a.fetchAndAndRelaxed(~which) & ~which;
78 const auto adjusted = [&](
int old) {
return (old & ~from) | to; };
79 int value =
a.loadRelaxed();
205#if QT_DEPRECATED_SINCE(6, 0)
206bool QFutureInterfaceBase::isPaused()
const
267 const auto canSuspend = [] (
int state) {
275 if (!canSuspend(
state))
281 if (!canSuspend(
state))
347#ifndef QT_NO_EXCEPTIONS
357#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
364 if (
d->state.loadRelaxed() & (Canceled|Finished))
367 d->hasException =
true;
368 d->data.setException(exception);
370 d->waitCondition.wakeAll();
371 d->pausedWaitCondition.wakeAll();
427 const int waitIndex = (resultIndex == -1) ? INT_MAX : resultIndex;
441 if (!alreadyFinished) {
633 :
state(initialState)
641 data.m_exceptionStore.~ExceptionStore();
643 data.m_results.~ResultStoreBase();
661 if (
data.m_results.hasNextResult())
665 &&
data.m_results.hasNextResult() ==
false)
669 &&
data.m_results.hasNextResult();
741 interface->postCallOutEvent(callOutEvent1);
742 interface->postCallOutEvent(callOutEvent2);
779 const int begin =
it.resultIndex();
802 for (
auto &&
event : events)
814 interface->callOutInterfaceDisconnected();
843 if (
d->continuation) {
844 qWarning() <<
"Adding a continuation to a future which already has a continuation. "
845 "The existing continuation is overwritten.";
847 d->continuation = std::move(
func);
848 d->continuationData = continuationFutureData;
858 d->continuation =
nullptr;
860 d->continuationData =
nullptr;
866 if (
d->continuation) {
870 auto fn = std::move(
d->continuation);
879 d->continuation = std::move(fn);
895 return d->launchAsync;
void storeRelaxed(T newValue) noexcept
T loadRelaxed() const noexcept
void invalidate() noexcept
Marks this QElapsedTimer object as invalid.
qint64 elapsed() const noexcept
Returns the number of milliseconds since this QElapsedTimer was last started.
void start() noexcept
Starts this timer.
bool isValid() const noexcept
Returns false if the timer has never been started or invalidated by a call to invalidate().
virtual void raise() const
In your QException subclass, reimplement raise() like this:
virtual ~QFutureCallOutInterface()
virtual void postCallOutEvent(const QFutureCallOutEvent &)=0
bool internal_updateProgress(int progress, const QString &progressText=QString())
QElapsedTimer progressTime
int m_expectedResultCount
void sendCallOuts(const QFutureCallOutEvent &callOut1, const QFutureCallOutEvent &callOut2)
void sendCallOut(const QFutureCallOutEvent &callOut)
bool internal_waitForNextResult()
void setState(QFutureInterfaceBase::State state)
QList< QFutureCallOutInterface * > outputConnections
void disconnectOutputInterface(QFutureCallOutInterface *iface)
bool internal_updateProgressValue(int progress)
bool internal_isResultReadyAt(int index) const
QThreadPool * pool() const
void connectOutputInterface(QFutureCallOutInterface *iface)
void internal_setThrottled(bool enable)
int internal_resultCount() const
QWaitCondition pausedWaitCondition
~QFutureInterfaceBasePrivate()
QWaitCondition waitCondition
QFutureInterfaceBasePrivate * continuationData
QScopedPointer< ProgressData > m_progress
QFutureInterfaceBasePrivate(QFutureInterfaceBase::State initialState)
QtPrivate::ExceptionStore & exceptionStore()
QThreadPool * threadPool() const
int progressMaximum() const
QtPrivate::ResultStoreBase & resultStoreBase()
void waitForResult(int resultIndex)
bool queryState(State state) const
bool isProgressUpdateNeeded() const
void setThreadPool(QThreadPool *pool)
void setExpectedResultCount(int resultCount)
void suspendIfRequested()
QFutureInterfaceBase(State initialState=NoState)
void reportResultsReady(int beginIndex, int endIndex)
void setContinuation(std::function< void(const QFutureInterfaceBase &)> func)
void setLaunchAsync(bool value)
bool derefT() const noexcept
void setThrottled(bool enable)
void setSuspended(bool suspend)
virtual ~QFutureInterfaceBase()
bool isSuspending() const
int progressValue() const
void setProgressValue(int progressValue)
void setProgressRange(int minimum, int maximum)
QFutureInterfaceBase & operator=(const QFutureInterfaceBase &other)
void swap(QFutureInterfaceBase &other) noexcept
void rethrowPossibleException()
bool refT() const noexcept
int progressMinimum() const
void reportException(const QException &e)
QString progressText() const
void runContinuation() const
void setProgressValueAndText(int progressValue, const QString &progressText)
int expectedResultCount()
void setRunnable(QRunnable *runnable)
bool isRunningOrPending() const
bool isChainCanceled() const
bool hasException() const
void setFilterMode(bool enable)
void reportSuspended() const
bool isResultReadyAt(int index) const
bool reportFinished(const T *result)
qsizetype size() const noexcept
bool isEmpty() const noexcept
void removeAt(qsizetype i)
const_reference at(qsizetype i) const noexcept
void append(parameter_type t)
void unlock() noexcept
Unlocks this mutex locker.
\macro QT_RESTRICTED_CAST_FROM_ASCII
void releaseThread()
Releases a thread previously reserved by a call to reserveThread().
T & emplace_back(Args &&...args)
bool wait(QMutex *, QDeadlineTimer=QDeadlineTimer(QDeadlineTimer::Forever))
Q_NORETURN void rethrowException() const
void setFilterMode(bool enable)
QSet< QString >::iterator it
void newState(QList< State > &states, const char *token, const char *lexem, bool pre)
Combined button and popup list for selecting options.
Q_CORE_EXPORT QFuture< void > makeReadyVoidFuture()
static jboolean copy(JNIEnv *, jobject)
#define QT_WARNING_DISABLE_GCC(text)
#define Q_IMPL_EVENT_COMMON(Class)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char * interface
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
@ MaxProgressEmitsPerSecond
static int switch_from_to(QAtomicInt &a, int from, int to)
static int switch_off(QAtomicInt &a, int which)
static int switch_on(QAtomicInt &a, int which)
constexpr const T & qMax(const T &a, const T &b)
GLboolean GLboolean GLboolean GLboolean a
[7]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
const QSemaphoreReleaser releaser(sem)
[4]
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
QtPrivate::ExceptionStore m_exceptionStore
QtPrivate::ResultStoreBase m_results