IBR-DTNSuite
0.12
Main Page
Namespaces
Classes
Files
File List
File Members
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
>
25
#include <
ibrcommon/thread/MutexLock.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
36
WallClock::~WallClock
()
37
{
38
}
39
40
void
WallClock::sync
()
41
{
42
try
{
43
ibrcommon::MutexLock
l(*
this
);
44
wait
();
45
}
catch
(
const
ibrcommon::Conditional::ConditionalAbortException
&ex) {
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
72
size_t
WallClock::timeout
(
ibrcommon::Timer
*)
73
{
74
dtn::data::Timestamp
ts =
dtn::utils::Clock::getMonotonicTimestamp
();
75
76
if
(ts >= _next)
77
{
78
TimeEvent::raise
(
dtn::utils::Clock::getTime
(),
TIME_SECOND_TICK
);
79
_next = ts.
get
<
size_t
>() + _frequency;
80
81
ibrcommon::MutexLock
l(*
this
);
82
signal
(
true
);
83
}
84
85
return
_frequency;
86
}
87
88
const
std::string
WallClock::getName
()
const
89
{
90
return
"WallClock"
;
91
}
92
}
93
}
daemon
src
core
WallClock.cpp
Generated on Thu Mar 27 2014 09:26:20 for IBR-DTNSuite by
1.8.4