File indexing completed on 2024-04-28 04:01:23

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