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