File indexing completed on 2024-05-05 12:27:23
0001 /* -*- C++ -*- 0002 The Queue class in ThreadWeaver. 0003 0004 SPDX-FileCopyrightText: 2005-2013 Mirko Boehm <mirko@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #ifndef THREADWEAVER_QUEUE_H 0010 #define THREADWEAVER_QUEUE_H 0011 0012 #include <QObject> 0013 0014 #include "queuesignals.h" 0015 #include "queuestream.h" 0016 0017 namespace ThreadWeaver 0018 { 0019 class Job; 0020 class State; 0021 0022 /** @brief Queue implements a ThreadWeaver job queue. 0023 * 0024 * Queues process jobs enqueued in them by automatically assigning them to worker threads they manage. 0025 * Applications using ThreadWeaver can make use of a global Queue which is instantiated on demand, or 0026 * create multiple queues as needed. A job assigned to a queue will be processed by that specific queue. 0027 * 0028 * Worker threads are created by the queues as needed. To create a customized global queue, 0029 * see GlobalQueueFactory. 0030 * 0031 * @see GlobalQueueFactory 0032 * @see Queue::enqueue() 0033 * @see Queue::instance() 0034 */ 0035 class THREADWEAVER_EXPORT Queue : public QueueSignals 0036 { 0037 Q_OBJECT 0038 public: 0039 explicit Queue(QObject *parent = nullptr); 0040 /** @brief Construct a queue with a customized implementation 0041 * The queue takes ownership and will delete the implementation upon destruction. */ 0042 explicit Queue(QueueSignals *implementation, QObject *parent = nullptr); 0043 ~Queue() override; 0044 0045 QueueStream stream(); 0046 0047 const State *state() const override; 0048 0049 void setMaximumNumberOfThreads(int cap) override; 0050 int maximumNumberOfThreads() const override; 0051 int currentNumberOfThreads() const override; 0052 0053 static ThreadWeaver::Queue *instance(); 0054 void enqueue(const QVector<JobPointer> &jobs) override; 0055 void enqueue(const JobPointer &job); 0056 bool dequeue(const JobPointer &) override; 0057 void dequeue() override; 0058 void finish() override; 0059 void suspend() override; 0060 void resume() override; 0061 bool isEmpty() const override; 0062 bool isIdle() const override; 0063 int queueLength() const override; 0064 void requestAbort() override; 0065 void reschedule() override; 0066 void shutDown() override; 0067 0068 /** @brief Interface for the global queue factory. */ 0069 struct GlobalQueueFactory { 0070 virtual ~GlobalQueueFactory() 0071 { 0072 } 0073 virtual Queue *create(QObject *parent) = 0; 0074 }; 0075 static void setGlobalQueueFactory(GlobalQueueFactory *factory); 0076 0077 private: 0078 class Private; 0079 Private *const d; 0080 }; 0081 0082 } 0083 0084 #endif // THREADWEAVER_QUEUE_H