112 Q_DECLARE_PUBLIC(QThreadPool)
113 friend class QThreadPoolThread;
116 QThreadPoolPrivate();
118 bool tryStart(QRunnable *task);
119 void enqueueTask(QRunnable *task,
int priority = 0);
120 int activeThreadCount()
const;
122 void tryToStartMoreThreads();
123 bool areAllThreadsActive()
const;
124 bool tooManyThreadsActive()
const;
126 int maxThreadCount()
const
127 {
return qMax(requestedMaxThreadCount, 1); }
128 void startThread(QRunnable *runnable =
nullptr);
130 bool waitForDone(
const QDeadlineTimer &timer);
132 void stealAndRunRunnable(QRunnable *runnable);
133 void deletePageIfFinished(QueuePage *page);
135 mutable QMutex mutex;
136 QSet<QThreadPoolThread *> allThreads;
137 QQueue<QThreadPoolThread *> waitingThreads;
138 QQueue<QThreadPoolThread *> expiredThreads;
139 QList<QueuePage *> queue;
140 QWaitCondition noActiveThreads;
143 std::chrono::duration<
int, std::milli> expiryTimeout = std::chrono::seconds(30);
144 int requestedMaxThreadCount = QThread::idealThreadCount();
145 int reservedThreads = 0;
146 int activeThreads = 0;
148 QThread::Priority threadPriority = QThread::InheritPriority;
149 QThread::QualityOfService serviceLevel = QThread::QualityOfService::Auto;
QueuePage(QRunnable *runnable, int pri)
bool tryTake(QRunnable *runnable)
void push(QRunnable *runnable)