1/* -*- C++ -*-
2 Interface for jobs 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 JOBINTERFACE_H
10#define JOBINTERFACE_H
11
12#include <QSharedPointer>
13
14#include "jobpointer.h"
15#include "threadweaver_export.h"
16
17class QMutex;
18
19namespace ThreadWeaver
20{
21class Thread;
22class Executor;
23class QueueAPI;
24class QueuePolicy;
25
26class JobInterface;
27/*!
28 * \relates ThreadWeaver::JobInterface
29 * \typedef ThreadWeaver::JobPointer
30 */
31typedef QSharedPointer<JobInterface> JobPointer;
32
33/*!
34 * \class ThreadWeaver::JobInterface
35 *
36 * \inmodule ThreadWeaver
37 */
38class THREADWEAVER_EXPORT JobInterface
39{
40public:
41 /*!
42 * \value Status_NoStatus
43 * \value Status_New
44 * \value Status_Queued
45 * \value Status_Running
46 * \value Status_Success
47 * \value Status_Failed
48 * \value Status_Aborted
49 * \value Status_NumberOfStatuses
50 */
51 enum Status {
52 Status_NoStatus = 0,
53 Status_New,
54 Status_Queued,
55 Status_Running,
56 Status_Success,
57 Status_Failed,
58 Status_Aborted,
59 Status_NumberOfStatuses,
60 };
61
62 /*!
63 */
64 virtual ~JobInterface()
65 {
66 }
67 /*!
68 */
69 virtual void execute(const JobPointer &job, Thread *) = 0;
70 /*!
71 */
72 virtual void blockingExecute() = 0;
73 /*!
74 */
75 virtual Executor *setExecutor(Executor *executor) = 0;
76 /*!
77 */
78 virtual Executor *executor() const = 0;
79 /*!
80 */
81 virtual int priority() const = 0;
82 /*!
83 */
84 virtual Status status() const = 0;
85 /*!
86 */
87 virtual void setStatus(Status) = 0;
88 /*!
89 */
90 virtual bool success() const = 0;
91 /*!
92 */
93 virtual void requestAbort() = 0;
94 /*!
95 */
96 virtual void aboutToBeQueued(QueueAPI *api) = 0;
97 /*!
98 */
99 virtual void aboutToBeQueued_locked(QueueAPI *api) = 0;
100 /*!
101 */
102 virtual void aboutToBeDequeued(QueueAPI *api) = 0;
103 /*!
104 */
105 virtual void aboutToBeDequeued_locked(QueueAPI *api) = 0;
106 /*!
107 */
108 virtual bool isFinished() const = 0;
109 /*!
110 */
111 virtual void assignQueuePolicy(QueuePolicy *) = 0;
112 /*!
113 */
114 virtual void removeQueuePolicy(QueuePolicy *) = 0;
115 /*!
116 */
117 virtual QList<QueuePolicy *> queuePolicies() const = 0;
118 /*!
119 */
120 virtual void run(JobPointer self, Thread *thread) = 0;
121 friend class Executor;
122 /*!
123 */
124 virtual void defaultBegin(const JobPointer &job, Thread *thread) = 0;
125 /*!
126 */
127 virtual void defaultEnd(const JobPointer &job, Thread *thread) = 0;
128 /*!
129 */
130 virtual QMutex *mutex() const = 0;
131};
132
133}
134
135Q_DECLARE_METATYPE(ThreadWeaver::JobPointer)
136
137#endif // JOBINTERFACE_H
138

source code of threadweaver/src/jobinterface.h