File indexing completed on 2024-05-12 07:57:48
0001 /* -*- C++ -*- 0002 Interface for jobs 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 JOBINTERFACE_H 0010 #define JOBINTERFACE_H 0011 0012 #include <QSharedPointer> 0013 0014 #include "jobpointer.h" 0015 #include "threadweaver_export.h" 0016 0017 class QMutex; 0018 0019 namespace ThreadWeaver 0020 { 0021 class Thread; 0022 class Executor; 0023 class QueueAPI; 0024 class QueuePolicy; 0025 0026 class JobInterface; 0027 typedef QSharedPointer<JobInterface> JobPointer; 0028 0029 class THREADWEAVER_EXPORT JobInterface 0030 { 0031 public: 0032 enum Status { 0033 Status_NoStatus = 0, 0034 Status_New, 0035 Status_Queued, 0036 Status_Running, 0037 Status_Success, 0038 Status_Failed, 0039 Status_Aborted, 0040 Status_NumberOfStatuses, 0041 }; 0042 0043 virtual ~JobInterface() 0044 { 0045 } 0046 virtual void execute(const JobPointer &job, Thread *) = 0; 0047 virtual void blockingExecute() = 0; 0048 virtual Executor *setExecutor(Executor *executor) = 0; 0049 virtual Executor *executor() const = 0; 0050 virtual int priority() const = 0; 0051 virtual Status status() const = 0; 0052 virtual void setStatus(Status) = 0; 0053 virtual bool success() const = 0; 0054 virtual void requestAbort() = 0; 0055 virtual void aboutToBeQueued(QueueAPI *api) = 0; 0056 virtual void aboutToBeQueued_locked(QueueAPI *api) = 0; 0057 virtual void aboutToBeDequeued(QueueAPI *api) = 0; 0058 virtual void aboutToBeDequeued_locked(QueueAPI *api) = 0; 0059 virtual bool isFinished() const = 0; 0060 virtual void assignQueuePolicy(QueuePolicy *) = 0; 0061 virtual void removeQueuePolicy(QueuePolicy *) = 0; 0062 virtual QList<QueuePolicy *> queuePolicies() const = 0; 0063 virtual void run(JobPointer self, Thread *thread) = 0; 0064 friend class Executor; 0065 virtual void defaultBegin(const JobPointer &job, Thread *thread) = 0; 0066 virtual void defaultEnd(const JobPointer &job, Thread *thread) = 0; 0067 virtual QMutex *mutex() const = 0; 0068 }; 0069 0070 } 0071 0072 Q_DECLARE_METATYPE(ThreadWeaver::JobPointer) 0073 0074 #endif // JOBINTERFACE_H