src
libros
poll_manager.cpp
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2009, Willow Garage, Inc.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are met:
6
* * Redistributions of source code must retain the above copyright notice,
7
* this list of conditions and the following disclaimer.
8
* * Redistributions in binary form must reproduce the above copyright
9
* notice, this list of conditions and the following disclaimer in the
10
* documentation and/or other materials provided with the distribution.
11
* * Neither the names of Willow Garage, Inc. nor the names of its
12
* contributors may be used to endorse or promote products derived from
13
* this software without specific prior written permission.
14
*
15
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
* POSSIBILITY OF SUCH DAMAGE.
26
*/
27
28
#include "
ros/poll_manager.h
"
29
#include "ros/common.h"
30
31
#include <signal.h>
32
33
namespace
ros
34
{
35
36
const
PollManagerPtr
&
PollManager::instance
()
37
{
38
static
PollManagerPtr
poll_manager = boost::make_shared<PollManager>();
39
return
poll_manager;
40
}
41
42
PollManager::PollManager
()
43
: shutting_down_(false)
44
{
45
}
46
47
PollManager::~PollManager
()
48
{
49
shutdown
();
50
}
51
52
void
PollManager::start
()
53
{
54
shutting_down_
=
false
;
55
thread_
= boost::thread(&
PollManager::threadFunc
,
this
);
56
}
57
58
void
PollManager::shutdown
()
59
{
60
if
(
shutting_down_
)
return
;
61
62
shutting_down_
=
true
;
63
if
(
thread_
.get_id() != boost::this_thread::get_id())
64
{
65
thread_
.join();
66
}
67
68
boost::recursive_mutex::scoped_lock lock(
signal_mutex_
);
69
poll_signal_
.disconnect_all_slots();
70
}
71
72
void
PollManager::threadFunc
()
73
{
74
disableAllSignalsInThisThread();
75
76
while
(!
shutting_down_
)
77
{
78
{
79
boost::recursive_mutex::scoped_lock lock(
signal_mutex_
);
80
poll_signal_
();
81
}
82
83
if
(
shutting_down_
)
84
{
85
return
;
86
}
87
88
poll_set_
.
update
(100);
89
}
90
}
91
92
boost::signals2::connection
PollManager::addPollThreadListener
(
const
VoidFunc
& func)
93
{
94
boost::recursive_mutex::scoped_lock lock(
signal_mutex_
);
95
return
poll_signal_
.connect(func);
96
}
97
98
void
PollManager::removePollThreadListener
(boost::signals2::connection c)
99
{
100
boost::recursive_mutex::scoped_lock lock(
signal_mutex_
);
101
c.disconnect();
102
}
103
104
}
ros::PollManager::removePollThreadListener
void removePollThreadListener(boost::signals2::connection c)
Definition:
poll_manager.cpp:98
ros::PollManager::threadFunc
void threadFunc()
Definition:
poll_manager.cpp:72
boost::shared_ptr< PollManager >
ros::PollManager::thread_
boost::thread thread_
Definition:
poll_manager.h:72
ros
ros::PollManager::poll_set_
PollSet poll_set_
Definition:
poll_manager.h:66
ros::PollManager::addPollThreadListener
boost::signals2::connection addPollThreadListener(const VoidFunc &func)
Definition:
poll_manager.cpp:92
ros::PollManager::poll_signal_
VoidSignal poll_signal_
Definition:
poll_manager.h:69
ros::VoidFunc
boost::function< void(void)> VoidFunc
Definition:
poll_manager.h:46
ros::PollManager::~PollManager
~PollManager()
Definition:
poll_manager.cpp:47
ros::PollSet::update
void update(int poll_timeout)
Process all socket events.
Definition:
poll_set.cpp:186
ros::PollManager::shutting_down_
volatile bool shutting_down_
Definition:
poll_manager.h:67
ros::PollManager::instance
static const PollManagerPtr & instance()
Definition:
poll_manager.cpp:36
ros::PollManager::PollManager
PollManager()
Definition:
poll_manager.cpp:42
poll_manager.h
ros::PollManager::signal_mutex_
boost::recursive_mutex signal_mutex_
Definition:
poll_manager.h:70
ros::PollManager::shutdown
void shutdown()
Definition:
poll_manager.cpp:58
ros::PollManager::start
void start()
Definition:
poll_manager.cpp:52
roscpp
Author(s): Morgan Quigley, Josh Faust, Brian Gerkey, Troy Straszheim, Dirk Thomas
, Jacob Perron
autogenerated on Sat Sep 14 2024 02:59:35