1/* -*- C++ -*-
2 The Queue class in ThreadWeaver.
3
4 SPDX-FileCopyrightText: 2005-2013 Mirko Boehm <mirko@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.0-or-later
7*/
8
9#ifndef THREADWEAVER_QUEUE_H
10#define THREADWEAVER_QUEUE_H
11
12#include <QObject>
13
14#include "queuesignals.h"
15#include "queuestream.h"
16
17namespace ThreadWeaver
18{
19class Job;
20class State;
21
22/*!
23 * \class ThreadWeaver::Queue
24 * \inheaderfile ThreadWeaver/Queue
25 * \inmodule ThreadWeaver
26 *
27 * \brief Queue implements a ThreadWeaver job queue.
28 *
29 * Queues process jobs enqueued in them by automatically assigning them to worker threads they manage.
30 * Applications using ThreadWeaver can make use of a global Queue which is instantiated on demand, or
31 * create multiple queues as needed. A job assigned to a queue will be processed by that specific queue.
32 *
33 * Worker threads are created by the queues as needed. To create a customized global queue,
34 * see GlobalQueueFactory.
35 *
36 * \sa GlobalQueueFactory
37 * \sa Queue::enqueue()
38 * \sa Queue::instance()
39 */
40class THREADWEAVER_EXPORT Queue : public QueueSignals
41{
42 Q_OBJECT
43public:
44 /*!
45 */
46 explicit Queue(QObject *parent = nullptr);
47 /*! \brief Construct a queue with a customized implementation.
48 * The queue takes ownership and will delete the implementation upon destruction. */
49 explicit Queue(QueueSignals *implementation, QObject *parent = nullptr);
50 ~Queue() override;
51
52 /*!
53 */
54 QueueStream stream();
55
56 const State *state() const override;
57
58 void setMaximumNumberOfThreads(int cap) override;
59 int maximumNumberOfThreads() const override;
60 int currentNumberOfThreads() const override;
61
62 /*!
63 */
64 static ThreadWeaver::Queue *instance();
65 void enqueue(const QList<JobPointer> &jobs) override;
66 /*!
67 */
68 void enqueue(const JobPointer &job);
69 bool dequeue(const JobPointer &) override;
70 void dequeue() override;
71 void finish() override;
72 void suspend() override;
73 void resume() override;
74 bool isEmpty() const override;
75 bool isIdle() const override;
76 int queueLength() const override;
77 void requestAbort() override;
78 void reschedule() override;
79 void shutDown() override;
80
81 /*!
82 * \inmodule ThreadWeaver
83 * \brief Interface for the global queue factory.
84 */
85 struct GlobalQueueFactory {
86 virtual ~GlobalQueueFactory()
87 {
88 }
89 virtual Queue *create(QObject *parent) = 0;
90 };
91 /*!
92 */
93 static void setGlobalQueueFactory(GlobalQueueFactory *factory);
94
95private:
96 class Private;
97 Private *const d;
98};
99
100}
101
102#endif // THREADWEAVER_QUEUE_H
103

source code of threadweaver/src/queue.h