comparison OrthancStone/Sources/Oracle/ThreadedOracle.h @ 1512:244ad1e4e76a

reorganization of folders
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 07 Jul 2020 16:21:02 +0200
parents Framework/Oracle/ThreadedOracle.h@b7210c688ca7
children 85e117739eca
comparison
equal deleted inserted replaced
1511:9dfeee74c1e6 1512:244ad1e4e76a
1 /**
2 * Stone of Orthanc
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4 * Department, University Hospital of Liege, Belgium
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium
6 *
7 * This program is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU Affero General Public License
9 * as published by the Free Software Foundation, either version 3 of
10 * the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 **/
20
21
22 #pragma once
23
24 #include <OrthancFramework.h> // To have the macros properly defined
25
26 #if !defined(ORTHANC_ENABLE_THREADS)
27 # error The macro ORTHANC_ENABLE_THREADS must be defined
28 #endif
29
30 #if !defined(ORTHANC_ENABLE_DCMTK)
31 # error The macro ORTHANC_ENABLE_DCMTK must be defined
32 #endif
33
34 #if ORTHANC_ENABLE_THREADS != 1
35 # error This file can only compiled for native targets
36 #endif
37
38 #if ORTHANC_ENABLE_DCMTK == 1
39 # include "../Toolbox/ParsedDicomCache.h"
40 #endif
41
42 #include "IOracle.h"
43 #include "GenericOracleRunner.h"
44 #include "../Messages/IMessageEmitter.h"
45
46 #include <MultiThreading/SharedMessageQueue.h>
47
48
49 namespace OrthancStone
50 {
51 class ThreadedOracle : public IOracle
52 {
53 private:
54 enum State
55 {
56 State_Setup,
57 State_Running,
58 State_Stopped
59 };
60
61 class Item;
62 class SleepingCommands;
63
64 IMessageEmitter& emitter_;
65 Orthanc::WebServiceParameters orthanc_;
66 std::string rootDirectory_;
67 Orthanc::SharedMessageQueue queue_;
68 State state_;
69 boost::mutex mutex_;
70 std::vector<boost::thread*> workers_;
71 boost::shared_ptr<SleepingCommands> sleepingCommands_;
72 boost::thread sleepingWorker_;
73 unsigned int sleepingTimeResolution_;
74
75 #if ORTHANC_ENABLE_DCMTK == 1
76 boost::shared_ptr<ParsedDicomCache> dicomCache_;
77 #endif
78
79 void Step();
80
81 static void Worker(ThreadedOracle* that);
82
83 static void SleepingWorker(ThreadedOracle* that);
84
85 void StopInternal();
86
87 public:
88 ThreadedOracle(IMessageEmitter& emitter);
89
90 virtual ~ThreadedOracle();
91
92 void SetOrthancParameters(const Orthanc::WebServiceParameters& orthanc);
93
94 void SetRootDirectory(const std::string& rootDirectory);
95
96 void SetThreadsCount(unsigned int count);
97
98 void SetSleepingTimeResolution(unsigned int milliseconds);
99
100 void SetDicomCacheSize(size_t size);
101
102 void Start();
103
104 void Stop()
105 {
106 StopInternal();
107 }
108
109 virtual bool Schedule(boost::shared_ptr<IObserver> receiver,
110 IOracleCommand* command) ORTHANC_OVERRIDE;
111 };
112 }