ImagingTools Core SDK
CWorkerThread.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/QThread>
7
8// ACF includes
9#include <istd/TDelPtr.h>
10
11// ImtCore includes
12#include <imtrest/IRequest.h>
13#include <imtrest/IResponse.h>
14#include <imtrest/CWorker.h>
15
16
17namespace imtrest
18{
19
20class CWorkerManagerComp;
21
22
23class CWorkerThread: public QThread
24{
25 Q_OBJECT
26public:
27 CWorkerThread(const CWorkerManagerComp* workerManager, const QByteArray& subCommandId);
28
29 enum Status
30 {
31 ST_PROCESS,
32 ST_CLOSE
33 };
34
35 Status GetStatus();
36 void SetStatus(Status status);
37 void SetRequestPtr(const IRequest* requestPtr);
38 bool SendResponse(const QByteArray& requestId, ConstResponsePtr& response);
39
40 //reimplemented (QThread)
41 virtual void run() override;
42
43Q_SIGNALS:
44 void StartProcess(const IRequest* request, const QByteArray& subCommandId);
45 void FinishProcess(const IRequest* request, const QByteArray& subCommandId);
46
47protected Q_SLOTS:
48 void OnStarted();
49 void OnFinishProcess(const IRequest* request, const QByteArray& subCommandId);
50
51private:
52 Status m_status;
53 mutable CWorkerManagerComp* m_workerManager;
54 istd::TDelPtr<CWorker> m_workerPtr;
55 const IRequest* m_requestPtr;
56 mutable QMutex m_statusMutex;
57 QByteArray m_subCommandId;
58};
59
60
61} // namespace imtrest
62
63