comparison Applications/Sdl/BasicSdlApplicationContext.cpp @ 222:84844649a8fd am

continued: reusable applications
author am@osimis.io
date Tue, 12 Jun 2018 17:21:15 +0200
parents
children 68856534f005
comparison
equal deleted inserted replaced
221:d7b2590744f8 222:84844649a8fd
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-2018 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 #include "BasicSdlApplicationContext.h"
23
24 namespace OrthancStone
25 {
26 IWidget& BasicSdlApplicationContext::SetCentralWidget(IWidget* widget) // Takes ownership
27 {
28 centralViewport_.SetCentralWidget(widget);
29 return *widget;
30 }
31
32
33 void BasicSdlApplicationContext::UpdateThread(BasicSdlApplicationContext* that)
34 {
35 while (!that->stopped_)
36 {
37 {
38 ViewportLocker locker(*that);
39 locker.GetViewport().UpdateContent();
40 }
41
42 boost::this_thread::sleep(boost::posix_time::milliseconds(that->updateDelay_));
43 }
44 }
45
46
47 BasicSdlApplicationContext::BasicSdlApplicationContext(Orthanc::WebServiceParameters& orthanc) :
48 oracle_(viewportMutex_, 4), // Use 4 threads to download
49 //oracle_(viewportMutex_, 1), // Disable threading to be reproducible
50 webService_(oracle_, orthanc),
51 stopped_(true),
52 updateDelay_(100) // By default, 100ms between each refresh of the content
53 {
54 srand(time(NULL));
55 }
56
57
58 void BasicSdlApplicationContext::Start()
59 {
60 oracle_.Start();
61
62 if (centralViewport_.HasUpdateContent())
63 {
64 stopped_ = false;
65 updateThread_ = boost::thread(UpdateThread, this);
66 }
67 }
68
69
70 void BasicSdlApplicationContext::Stop()
71 {
72 stopped_ = true;
73
74 if (updateThread_.joinable())
75 {
76 updateThread_.join();
77 }
78
79 oracle_.Stop();
80 }
81 }