19#include <sys/syscall.h>
20#include <linux/sched.h>
26 #if __has_include(<linux/sched/types.h>)
27 #include <linux/sched/types.h>
28 #define __SCHED_ATTR_AVAILABLE__ 1
32 #define __has_include(x) 0
35#if !defined(__SCHED_ATTR_AVAILABLE__) && !defined(__SCHED_ATTR_SIZE__)
48#include <linux/sched/types.h>
65#if !defined(HAVE_SCHED_SETATTR)
71template <
typename Owner>
75 template <
typename ...Tn>
94 std::int64_t mdc(std::int64_t
a, std::int64_t
b);
96 std::atomic<std::int64_t> _period;
97 std::atomic<bool> _running;
99 std::function<
void()> _task;
103template <
typename Owner>
104template <
typename ...Tn>
106 _task = std::bind(
task,
owner, std::forward<Tn>(
an)...);
107 _period.store(0, std::memory_order_release);
110template <
typename Owner>
115template <
typename Owner>
118 _running.store(
false, std::memory_order_release);
129template <
typename Owner>
136 std::memset(&
sa, 0,
sizeof(
sa));
143 _period.store(period, std::memory_order_release);
144 _running.store(
true, std::memory_order_release);
148 _running.store(
false, std::memory_order_release);
149 throw std::runtime_error(
"Failed to create periodic thread");
154template <
typename Owner>
156 _period.store(mdc(_period.load(std::memory_order_acquire), period), std::memory_order_release);
159template <
typename Owner>
161 _period.store(period, std::memory_order_release);
168template <
typename Owner>
170 return _period.load(std::memory_order_acquire);
173template <
typename Owner>
183 while (
thread->running()) {
211 param.sched_priority = 0;
230template <
typename Owner>
232 return _running.load(std::memory_order_acquire);
235template <
typename Owner>
238 std::int64_t
temp =
b;
Definition periodicThread.h:72
Periodic_Thread(Owner *owner, void(Owner::*task)(Tn...), Tn...an)
Definition periodicThread.h:105
void adjust_period(std::int64_t period)
Definition periodicThread.h:155
Periodic_Thread()=default
void start(std::int64_t period)
Definition periodicThread.h:130
std::int64_t period() const
Definition periodicThread.h:169
Periodic_Thread(const Periodic_Thread &)=delete
void join()
Definition periodicThread.h:116
~Periodic_Thread()
Definition periodicThread.h:111
void set_period(std::int64_t period)
Definition periodicThread.h:160
static void * run(void *arg)
Definition periodicThread.h:174
Periodic_Thread & operator=(const Periodic_Thread &)=delete
bool running()
Definition periodicThread.h:231
Select_Debug<(Traits< T >::debugged &&Traits< Debug >::error)> db(Debug_Error l)
Definition debug.h:166
void component_signal_handler(int sig)
Definition periodicThread.h:53
int sched_setattr(pid_t pid, const struct sched_attr *attr, unsigned int flags)
Definition periodicThread.h:66
Definition periodicThread.h:36
uint64_t sched_deadline
Definition periodicThread.h:44
int32_t sched_nice
Definition periodicThread.h:40
uint64_t sched_period
Definition periodicThread.h:45
uint32_t size
Definition periodicThread.h:37
uint64_t sched_flags
Definition periodicThread.h:39
uint64_t sched_runtime
Definition periodicThread.h:43
uint32_t sched_priority
Definition periodicThread.h:41
uint32_t sched_policy
Definition periodicThread.h:38