ros2_control - iron
Loading...
Searching...
No Matches
realtime_helpers.hpp
1// Copyright (c) 2022, PickNik, Inc.
2//
3// Redistribution and use in source and binary forms, with or without
4// modification, are permitted provided that the following conditions are met:
5//
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8//
9// * Redistributions in binary form must reproduce the above copyright
10// notice, this list of conditions and the following disclaimer in the
11// documentation and/or other materials provided with the distribution.
12//
13// * Neither the name of the PickNik Inc. nor the names of its
14// contributors may be used to endorse or promote products derived from
15// this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27// POSSIBILITY OF SUCH DAMAGE.
28
29#ifndef REALTIME_TOOLS__REALTIME_HELPERS_HPP_
30#define REALTIME_TOOLS__REALTIME_HELPERS_HPP_
31
32#include <string>
33#include <thread>
34#include <utility>
35#include <vector>
36
37#ifdef _WIN32
38// Here we directly use void* instead of including windows.h
39// and using HANDLE macro to avoid polluting all the downstream
40// compilation units that include the public header realtime_helpers.hpp
41// with problematic macros like MIN, MAX or ERROR
42using NATIVE_THREAD_HANDLE = void *;
43#else
44using NATIVE_THREAD_HANDLE = pthread_t;
45#endif
46
47namespace realtime_tools
48{
54
60bool configure_sched_fifo(int priority);
61
72[[deprecated("Use std::pair<bool, std::string> lock_memory() instead.")]]
73bool lock_memory(std::string & message);
74
85std::pair<bool, std::string> lock_memory();
86
97std::pair<bool, std::string> set_thread_affinity(
98 NATIVE_THREAD_HANDLE thread, const std::vector<int> & cores);
99
110std::pair<bool, std::string> set_thread_affinity(NATIVE_THREAD_HANDLE thread, int core);
111
122std::pair<bool, std::string> set_thread_affinity(std::thread & thread, int core);
123
133std::pair<bool, std::string> set_current_thread_affinity(int core);
134
144std::pair<bool, std::string> set_current_thread_affinity(const std::vector<int> & cores);
145
153
154} // namespace realtime_tools
155
156#endif // REALTIME_TOOLS__REALTIME_HELPERS_HPP_
A pthread mutex wrapper that provides a mutex with the priority inheritance protocol and a priority c...
Definition async_function_handler.hpp:38
std::pair< bool, std::string > set_current_thread_affinity(int core)
Definition realtime_helpers.cpp:213
std::pair< bool, std::string > set_thread_affinity(NATIVE_THREAD_HANDLE thread, const std::vector< int > &cores)
Definition realtime_helpers.cpp:125
bool configure_sched_fifo(int priority)
Definition realtime_helpers.cpp:56
int64_t get_number_of_available_processors()
Definition realtime_helpers.cpp:231
bool has_realtime_kernel()
Definition realtime_helpers.cpp:46
std::pair< bool, std::string > lock_memory()
Definition realtime_helpers.cpp:76