comparison Resources/Graveyard/Deprecated/Platforms/Generic/DelayedCallCommand.cpp @ 1503:553084468225

moving /Deprecated/ to /Resources/Graveyard/Deprecated/
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 30 Jun 2020 11:38:13 +0200
parents Deprecated/Platforms/Generic/DelayedCallCommand.cpp@419d0320c344
children
comparison
equal deleted inserted replaced
1502:e5729dab3f67 1503:553084468225
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 #include "DelayedCallCommand.h"
23 #include "boost/thread/thread.hpp"
24
25 #include <iostream>
26
27 namespace Deprecated
28 {
29 DelayedCallCommand::DelayedCallCommand(MessageHandler<IDelayedCallExecutor::TimeoutMessage>* callback, // takes ownership
30 unsigned int timeoutInMs,
31 Orthanc::IDynamicObject* payload /* takes ownership */,
32 OrthancStone::NativeStoneApplicationContext& context
33 ) :
34 callback_(callback),
35 payload_(payload),
36 context_(context),
37 expirationTimePoint_(boost::posix_time::microsec_clock::local_time() + boost::posix_time::milliseconds(timeoutInMs)),
38 timeoutInMs_(timeoutInMs)
39 {
40 }
41
42
43 void DelayedCallCommand::Execute()
44 {
45 while (boost::posix_time::microsec_clock::local_time() < expirationTimePoint_)
46 {
47 boost::this_thread::sleep(boost::posix_time::milliseconds(1));
48 }
49 }
50
51 void DelayedCallCommand::Commit()
52 {
53 // We want to make sure that, i.e, the UpdateThread is not
54 // triggered while we are updating the "model" with the result of
55 // an OracleCommand
56 OrthancStone::NativeStoneApplicationContext::GlobalMutexLocker lock(context_);
57
58 if (callback_.get() != NULL)
59 {
60 IDelayedCallExecutor::TimeoutMessage message; // TODO: add payload
61 callback_->Apply(message);
62 }
63 }
64 }