ImagingTools Core SDK
CJobExecutionControllerCompBase.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QTimer>
7#include <QtCore/QThreadPool>
8#include <QtCore/QRunnable>
9#include <QtCore/QMap>
10
11// ACF includes
12#include <ibase/CCumulatedProgressManagerBase.h>
13#include <ilog/TLoggerCompWrap.h>
14#include <iprm/IParamsSet.h>
15
16// Acula includes
17#include <imtbase/TModelUpdateBinder.h>
18#include <imthype/IJobProcessor.h>
19#include <imthype/IJobQueueManager.h>
20#include <imthype/CStandardJobOutput.h>
21
22
23namespace imthype
24{
25
26
33class CJobExecutionControllerCompBase: public QObject, public ilog::CLoggerComponentBase
34{
35 Q_OBJECT
36public:
37 typedef ilog::CLoggerComponentBase BaseClass;
38
39 I_BEGIN_BASE_COMPONENT(CJobExecutionControllerCompBase);
40 I_ASSIGN(m_jobQueueManagerCompPtr, "JobQueueManager", "Manager for the job queue", true, "JobQueueManager");
41 I_END_COMPONENT;
42
44
45protected:
46 virtual void ShutdownAllTasks();
47
48 class JobProgressManager : public ibase::CCumulatedProgressManagerBase
49 {
50 public:
51 JobProgressManager(CJobExecutionControllerCompBase& parent, const QByteArray& jobId);
52
53 protected:
54 virtual void OnProgressChanged(double cumulatedValue) override;
55
56 private:
58 QByteArray m_jobId;
59 };
60
61 typedef std::shared_ptr<JobProgressManager> JobProgressManagerPtr;
62
63 class Task: public QRunnable
64 {
65 public:
66 Task(
68 const QByteArray& jobId,
69 const IJobProcessor& taskProcessor,
71 iprm::IParamsSetSharedPtr paramsPtr,
72 JobProgressManager* progressPtr);
73
74 // reimplemented (QRunnable)
75 virtual void run();
76
77 private:
78 const IJobProcessor& m_taskProcessor;
80 QByteArray m_jobId;
81 CStandardJobOutput m_jobOutput;
82 imtbase::IReferenceCollectionSharedPtr m_inputPtr;
83 iprm::IParamsSetSharedPtr m_paramsPtr;
84 JobProgressManager* m_progressPtr;
85 };
86
87protected:
88 // reimplemented (icomp::CComponentBase)
89 virtual void OnComponentCreated() override;
90 virtual void OnComponentDestroyed() override;
91
92protected Q_SLOTS:
97 void OnJobFinished(const QByteArray& jobId, const imthype::CStandardJobOutput& results);
98 void OnJobProgressChanged(const QByteArray& jobId, double progress);
99
100Q_SIGNALS:
101 void EmitJobFinished(const QByteArray& jobId, const imthype::CStandardJobOutput& results);
102 void EmitJobProgressChanged(const QByteArray& jobId, double progress);
103
104protected:
105 void OnJobQueueChanged(const istd::IChangeable::ChangeSet& changeset, const imthype::IJobQueueManager* modelPtr);
106
110 virtual const IJobProcessor* GetTaskProcessor(const QByteArray& workerTypeId) const = 0;
111
112private:
116 I_MULTIREF(IJobProcessor, m_jobTasksCompPtr);
117
121 I_REF(IJobQueueManager, m_jobQueueManagerCompPtr);
122
126 QTimer m_updateJobQueueTimer;
127
131 bool m_stopAllTasks;
132
136 QThreadPool m_threadPool;
137
138 QMap<QByteArray, JobProgressManagerPtr> m_jobProgressList;
139
141};
142
143
144} // namespace imthype
145
146
virtual const IJobProcessor * GetTaskProcessor(const QByteArray &workerTypeId) const =0