digiKam
Loading...
Searching...
No Matches
workerobject.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2010-04-06
7 * Description : Multithreaded worker object
8 *
9 * SPDX-FileCopyrightText: 2010-2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2012-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QObject>
21#include <QThread>
22
23// Local includes
24
25#include "digikam_export.h"
26
27class QEventLoop;
28
29namespace Digikam
30{
31
32class WorkerObjectRunnable;
33
34class DIGIKAM_EXPORT WorkerObject : public QObject
35{
36 Q_OBJECT
37
38public:
39
40 enum State
41 {
45 Deactivating
46 };
47
54
55public:
56
69 explicit WorkerObject();
70 ~WorkerObject() override;
71
72 State state() const;
73
74 void wait();
75
83 void setPriority(QThread::Priority priority);
84 QThread::Priority priority() const;
85
92 bool connectAndSchedule(const QObject* sender,
93 const char* signal,
94 const char* method,
95 Qt::ConnectionType type = Qt::AutoConnection) const;
96
97 static bool connectAndSchedule(const QObject* sender,
98 const char* signal,
99 const WorkerObject* receiver,
100 const char* method,
101 Qt::ConnectionType type = Qt::AutoConnection);
102
103 static bool disconnectAndSchedule(const QObject* sender,
104 const char* signal,
105 const WorkerObject* receiver,
106 const char* method);
107
108public Q_SLOTS:
109
115 void schedule();
116
125 void deactivate(DeactivatingMode mode = FlushSignals);
126
127Q_SIGNALS:
128
129 void started();
130 void finished();
131
132protected:
133
134 bool transitionToRunning();
135 void transitionToInactive();
136
137 void run();
138 void setEventLoop(QEventLoop* loop);
139 void addRunnable(WorkerObjectRunnable* loop);
140 void removeRunnable(WorkerObjectRunnable* loop);
141
156 void shutDown();
157
163 virtual void aboutToQuitLoop();
164
172 virtual void aboutToDeactivate();
173
174 bool event(QEvent* e) override;
175
176private:
177
178 friend class WorkerObjectRunnable;
179 friend class ThreadManager;
180
181private:
182
183 // Disable.
184 WorkerObject(const WorkerObject&) = delete;
185 WorkerObject& operator=(const WorkerObject&) = delete;
186 WorkerObject(QObject*) = delete;
187
188private:
189
190 class Private;
191 Private* const d = nullptr;
192};
193
194} // namespace Digikam
Definition threadmanager.h:33
Definition workerobject.h:35
DeactivatingMode
Definition workerobject.h:49
@ FlushSignals
Already sent signals are cleared.
Definition workerobject.h:50
@ KeepSignals
The thread is stopped, but already sent signals remain in the queue.
Definition workerobject.h:51
State
Definition workerobject.h:41
@ Scheduled
Definition workerobject.h:43
@ Inactive
Definition workerobject.h:42
@ Running
Definition workerobject.h:44
Definition datefolderview.cpp:34
Definition abstractalbumtreeview_p.h:75