1 | /* -*- C++ -*- |
2 | This file is part of ThreadWeaver, a KDE framework. |
3 | |
4 | SPDX-FileCopyrightText: 2013 Mirko Boehm <mirko@kde.org> |
5 | |
6 | SPDX-License-Identifier: LGPL-2.0-or-later |
7 | */ |
8 | |
9 | #ifndef THREADWEAVER_QUEUESIGNALS_H |
10 | #define THREADWEAVER_QUEUESIGNALS_H |
11 | |
12 | #include "queueinterface.h" |
13 | #include <QObject> |
14 | |
15 | namespace ThreadWeaver |
16 | { |
17 | namespace Private |
18 | { |
19 | class QueueSignals_Private; |
20 | } |
21 | |
22 | /** @brief QueueSignals declares the Qt signals shared by the Queue and Weaver classes. */ |
23 | class THREADWEAVER_EXPORT QueueSignals : public QObject, public QueueInterface |
24 | { |
25 | Q_OBJECT |
26 | public: |
27 | explicit QueueSignals(QObject *parent = nullptr); |
28 | explicit QueueSignals(ThreadWeaver::Private::QueueSignals_Private *d, QObject *parent = nullptr); |
29 | ~QueueSignals() override; |
30 | |
31 | Q_SIGNALS: |
32 | /** @brief Emitted when the Queue has completed all jobs currently queued. |
33 | * |
34 | * The Queue emits finished() when the job queue is empty, and the last job currently processed by a worker threads was |
35 | * completed. Beware that if multiple jobs are enqueued repeatedly one by one, this signal might be emitted multiple times, because the |
36 | * queued jobs where processed before new ones could be queued. To avoid this, queue all relevant jobs in a single operation, |
37 | * using for example a QueueStream or a Collection. |
38 | */ |
39 | void finished(); |
40 | |
41 | /** @brief The Queue has been suspended. |
42 | * |
43 | * When the Queue is suspended, worker threads will not be assigned new jobs to process. Jobs waiting in the queue will not be |
44 | * started until processing is resumed. When suspend() is called, the worker threads will continue to process the job currently |
45 | * assigned to them. When the last thread finishes it's current assignment, suspended() is emitted. |
46 | * |
47 | * @see suspend() |
48 | */ |
49 | void suspended(); |
50 | |
51 | /** @brief Emitted when the processing state of the Queue has changed. */ |
52 | void stateChanged(ThreadWeaver::State *); |
53 | |
54 | protected: |
55 | ThreadWeaver::Private::QueueSignals_Private *d(); |
56 | const ThreadWeaver::Private::QueueSignals_Private *d() const; |
57 | |
58 | private: |
59 | ThreadWeaver::Private::QueueSignals_Private *m_d; |
60 | }; |
61 | |
62 | } |
63 | |
64 | #endif // THREADWEAVER_QUEUESIGNALS_H |
65 | |