40 #ifndef QTCONCURRENT_THREADENGINE_H 41 #define QTCONCURRENT_THREADENGINE_H 43 #include <QtConcurrent/qtconcurrent_global.h> 45 #if !defined(QT_NO_CONCURRENT) ||defined(Q_CLANG_QDOC) 47 #include <QtCore/qthreadpool.h> 48 #include <QtCore/qfuture.h> 49 #include <QtCore/qdebug.h> 50 #include <QtCore/qexception.h> 51 #include <QtCore/qwaitcondition.h> 52 #include <QtCore/qatomic.h> 53 #include <QtCore/qsemaphore.h> 93 void startSingleThreaded();
98 bool isProgressReportingEnabled();
99 void setProgressValue(
int progress);
100 void setProgressRange(
int minimum,
int maximum);
101 void acquireBarrierSemaphore();
107 virtual bool shouldStartThread() {
return futureInterface ? !futureInterface->isPaused() :
true; }
110 bool startThreadInternal();
113 bool threadThrottleExit();
115 virtual void asynchronousFinish() = 0;
116 #ifndef QT_NO_EXCEPTIONS 117 void handleException(
const QException &exception);
127 template <
typename T>
137 return static_cast<QFutureInterface<T> *
>(futureInterface);
160 futureInterface =
new QFutureInterface<T>();
165 futureInterface->reportStarted();
166 QFuture<T>
future = QFuture<T>(futureInterfaceTyped());
169 acquireBarrierSemaphore();
170 threadPool->start(
this);
177 futureInterfaceTyped()->reportFinished(
result());
178 delete futureInterfaceTyped();
186 futureInterfaceTyped()->reportResult(_result, index);
189 void reportResults(
const QVector<T> &_result,
int index = -1,
int count = -1)
192 futureInterfaceTyped()->reportResults(_result, index, count);
200 template <
typename T>
205 : threadEngine(_threadEngine) { }
208 : threadEngine(other.threadEngine) { }
212 return threadEngine->startAsynchronously();
215 operator QFuture<T>()
217 return startAsynchronously();
228 template <
typename T>
239 T t = *this->threadEngine->startBlocking();
240 delete this->threadEngine;
255 this->threadEngine->startBlocking();
256 delete this->threadEngine;
261 template <
typename ThreadEngine>
272 #endif // QT_NO_CONCURRENT #define Q_CONCURRENT_EXPORT
Definition: qtconcurrent_global.h:51
Definition: qtconcurrentthreadengine.h:63
QFutureInterfaceBase * futureInterface
Definition: qtconcurrentthreadengine.h:120
ThreadEngine< T > * threadEngine
Definition: qtconcurrentthreadengine.h:221
virtual ThreadFunctionResult threadFunction()
Definition: qtconcurrentthreadengine.h:106
virtual bool shouldStartThread()
Definition: qtconcurrentthreadengine.h:107
virtual bool shouldThrottleThread()
Definition: qtconcurrentthreadengine.h:108
ThreadEngineStarterBase(const ThreadEngineStarterBase &other)
Definition: qtconcurrentthreadengine.h:207
ThreadEngineBarrier()
Definition: qtconcurrentthreadengine.cpp:88
ThreadEngineStarter< typename ThreadEngine::ResultType > startThreadEngine(ThreadEngine *threadEngine)
[qtconcurrentthreadengine-1]
Definition: qtconcurrentthreadengine.h:262
Definition: qtconcurrentthreadengine.h:87
ThreadEngineStarter(TypedThreadEngine *eng)
Definition: qtconcurrentthreadengine.h:234
QFuture< T > run(T(*functionPointer)())
Definition: qtconcurrentrun.h:72
QFuture< T > startAsynchronously()
Definition: qtconcurrentthreadengine.h:158
ThreadFunctionResult
Definition: qtconcurrentthreadengine.h:81
Definition: qtconcurrentthreadengine.h:247
bool releaseUnlessLast()
Definition: qtconcurrentthreadengine.cpp:147
void asynchronousFinish() override
Definition: qtconcurrentthreadengine.h:174
QFuture< T > startAsynchronously()
Definition: qtconcurrentthreadengine.h:210
int currentCount()
Definition: qtconcurrentthreadengine.cpp:140
void reportResult(const T *_result, int index=-1)
Definition: qtconcurrentthreadengine.h:183
virtual T * result()
Definition: qtconcurrentthreadengine.h:133
T ResultType
Definition: qtconcurrentthreadengine.h:131
QThreadPool * threadPool
Definition: qtconcurrentthreadengine.h:121
void startSingleThreaded()
Definition: qtconcurrentthreadengine.cpp:171
QString result
Definition: src_concurrent_qtconcurrentrun.cpp:79
ThreadEngineBarrier barrier
Definition: qtconcurrentthreadengine.h:122
Definition: qtconcurrentthreadengine.h:201
Definition: qtconcurrentthreadengine.h:128
T * startSingleThreaded()
Definition: qtconcurrentthreadengine.h:141
T * startBlocking()
Definition: qtconcurrentthreadengine.h:150
Definition: qtconcurrentthreadengine.h:229
QFuture< void > future
[5]
Definition: src_concurrent_qtconcurrentfilter.cpp:69
void startBlocking()
Definition: qtconcurrentthreadengine.cpp:179
The QtConcurrent namespace provides high-level APIs that make it possible to write multi-threaded pro...
Definition: qtconcurrentexception.h:51
Definition: qtconcurrentthreadengine.h:81
virtual void finish()
Definition: qtconcurrentthreadengine.h:105
int release()
Definition: qtconcurrentthreadengine.cpp:105
virtual void start()
Definition: qtconcurrentthreadengine.h:104
QFutureInterface< T > * futureInterfaceTyped()
Definition: qtconcurrentthreadengine.h:135
ThreadEngineStarterBase(ThreadEngine< T > *_threadEngine)
Definition: qtconcurrentthreadengine.h:204
void acquire()
Definition: qtconcurrentthreadengine.cpp:91
QtPrivate::ExceptionStore exceptionStore
Definition: qtconcurrentthreadengine.h:123
T startBlocking()
Definition: qtconcurrentthreadengine.h:237
void reportResults(const QVector< T > &_result, int index=-1, int count=-1)
Definition: qtconcurrentthreadengine.h:189
void wait()
Definition: qtconcurrentthreadengine.cpp:125
Definition: qtconcurrentthreadengine.h:81
void startBlocking()
Definition: qtconcurrentthreadengine.h:253