IBR-DTNSuite
0.12
Main Page
Namespaces
Classes
Files
File List
File Members
SignalHandler.cpp
Go to the documentation of this file.
1
/*
2
* SignalHandler.cpp
3
*
4
* Copyright (C) 2014 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 "
ibrcommon/thread/SignalHandler.h
"
23
24
namespace
ibrcommon
25
{
26
ibrcommon::Queue<int>
SignalHandler::_signal_queue;
27
28
void
SignalHandler::_proxy_handler(
int
signal)
29
{
30
_signal_queue.
push
(signal);
31
}
32
33
SignalHandler::SignalHandler
(
void
(*handler)(
int
))
34
: _handler(handler)
35
{
36
}
37
38
SignalHandler::~SignalHandler
()
39
{
40
stop
();
41
join
();
42
}
43
44
void
SignalHandler::initialize
()
45
{
46
start
();
47
}
48
49
void
SignalHandler::handle
(
int
signal)
50
{
51
// register signal at system
52
::signal(signal, _proxy_handler);
53
}
54
55
void
SignalHandler::run
(
void
) throw ()
56
{
57
try
{
58
int
signal = _signal_queue.
getnpop
(
true
);
59
_handler(signal);
60
}
catch
(
const
ibrcommon::QueueUnblockedException
&e) {
61
// unblocked
62
}
63
}
64
65
void
SignalHandler::__cancellation
() throw ()
66
{
67
_signal_queue.
abort
();
68
}
69
}
/* namespace ibrcommon */
ibrcommon
ibrcommon
thread
SignalHandler.cpp
Generated on Thu Mar 27 2014 09:26:21 for IBR-DTNSuite by
1.8.4