IBR-DTNSuite  0.10
WallClock.cpp
Go to the documentation of this file.
1 /*
2  * Clock.cpp
3  *
4  * Copyright (C) 2011 IBR, TU Braunschweig
5  *
6  * Written-by: Johannes Morgenroth <morgenroth@ibr.cs.tu-bs.de>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21 
22 #include "core/WallClock.h"
23 #include "core/TimeEvent.h"
24 #include <ibrdtn/utils/Clock.h>
26 #include <ibrcommon/Logger.h>
27 
28 namespace dtn
29 {
30  namespace core
31  {
32  WallClock::WallClock(const dtn::data::Timeout &frequency) : _frequency(frequency), _next(0), _timer(*this, frequency)
33  {
34  }
35 
37  {
38  }
39 
41  {
42  try {
43  ibrcommon::MutexLock l(*this);
44  wait();
46 
47  }
48  }
49 
50  void WallClock::componentUp() throw ()
51  {
52  // routine checked for throw() on 15.02.2013
53  if(_timer.isRunning())
54  {
55  _timer.reset();
56  }
57  else
58  {
59  try {
60  _timer.start();
61  } catch (const ibrcommon::ThreadException &ex) {
62  IBRCOMMON_LOGGER_TAG("WallClock", error) << ex.what() << IBRCOMMON_LOGGER_ENDL;
63  }
64  }
65  }
66 
67  void WallClock::componentDown() throw ()
68  {
69  _timer.pause();
70  }
71 
73  {
75 
76  if (dtntime == 0)
77  {
79 
80  ibrcommon::MutexLock l(*this);
81  signal(true);
82  }
83  else if (dtntime >= _next)
84  {
86  _next = dtntime.get<size_t>() + _frequency;
87 
88  ibrcommon::MutexLock l(*this);
89  signal(true);
90  }
91 
92  return _frequency;
93  }
94 
95  const std::string WallClock::getName() const
96  {
97  return "WallClock";
98  }
99  }
100 }