12 #ifndef INCLUDE_DISTORTOS_DYNAMICTHREAD_HPP_ 13 #define INCLUDE_DISTORTOS_DYNAMICTHREAD_HPP_ 30 #ifdef DISTORTOS_THREAD_DETACH_ENABLE 55 template<
typename Function,
typename... Args>
56 DynamicThread(
size_t stackSize,
bool canReceiveSignals,
size_t queuedSignals,
size_t signalActions,
57 uint8_t priority,
SchedulingPolicy schedulingPolicy, Function&&
function, Args&&... args);
70 template<
typename Function,
typename... Args>
74 std::forward<Function>(
function), std::forward<Args>(args)...}
103 #if DISTORTOS_SIGNALS_ENABLE == 1 124 #endif // DISTORTOS_SIGNALS_ENABLE == 1 139 #if DISTORTOS_SIGNALS_ENABLE == 1 155 #endif // DISTORTOS_SIGNALS_ENABLE == 1 207 #if DISTORTOS_SIGNALS_ENABLE == 1 229 #endif // DISTORTOS_SIGNALS_ENABLE == 1 242 void setPriority(uint8_t priority,
bool alwaysBehind = {})
override;
273 #else // !def DISTORTOS_THREAD_DETACH_ENABLE 282 #endif // !def DISTORTOS_THREAD_DETACH_ENABLE 305 template<
typename Function,
typename... Args>
307 const size_t signalActions,
const uint8_t priority,
const SchedulingPolicy schedulingPolicy,
308 Function&&
function, Args&&... args)
310 return {stackSize, canReceiveSignals, queuedSignals, signalActions, priority, schedulingPolicy,
311 std::forward<Function>(
function), std::forward<Args>(args)...};
327 template<
typename Function,
typename... Args>
330 return {parameters, std::forward<Function>(
function), std::forward<Args>(args)...};
354 template<
typename Function,
typename... Args>
356 const size_t queuedSignals,
const size_t signalActions,
const uint8_t priority,
357 const SchedulingPolicy schedulingPolicy, Function&&
function, Args&&... args)
359 auto thread =
makeDynamicThread(stackSize, canReceiveSignals, queuedSignals, signalActions, priority,
360 schedulingPolicy, std::forward<Function>(
function), std::forward<Args>(args)...);
362 const auto ret = thread.start();
363 assert(ret == 0 &&
"Could not start thread!");
381 template<
typename Function,
typename... Args>
384 auto thread =
makeDynamicThread(parameters, std::forward<Function>(
function), std::forward<Args>(args)...);
386 const auto ret = thread.start();
387 assert(ret == 0 &&
"Could not start thread!");
394 #ifdef DISTORTOS_THREAD_DETACH_ENABLE 396 template<
typename Function,
typename... Args>
398 const size_t signalActions,
const uint8_t priority,
const SchedulingPolicy schedulingPolicy,
399 Function&&
function, Args&&... args) :
401 priority, schedulingPolicy, *
this, std::forward<Function>(
function), std::forward<Args>(args)...}}
406 #endif // def DISTORTOS_THREAD_DETACH_ENABLE 410 #endif // INCLUDE_DISTORTOS_DYNAMICTHREAD_HPP_ DynamicThread(const DynamicThreadParameters parameters, Function &&function, Args &&... args)
DynamicThread's constructor.
Definition: DynamicThread.hpp:71
int generateSignal(uint8_t signalNumber) override
Generates signal for thread.
Definition: DynamicThread.cpp:64
DynamicThreadBase class header.
size_t queuedSignals
Definition: DynamicThreadParameters.hpp:78
DynamicThread makeAndStartDynamicThread(const size_t stackSize, const bool canReceiveSignals, const size_t queuedSignals, const size_t signalActions, const uint8_t priority, const SchedulingPolicy schedulingPolicy, Function &&function, Args &&... args)
Helper factory function to make and start DynamicThread object.
Definition: DynamicThread.hpp:355
DynamicThreadBase class is a type-erased interface for thread that has dynamic storage for bound func...
Definition: DynamicThreadBase.hpp:45
int queueSignal(uint8_t signalNumber, sigval value) override
Queues signal for thread.
Definition: DynamicThread.cpp:174
SchedulingPolicy schedulingPolicy
scheduling policy of the thread
Definition: DynamicThreadParameters.hpp:94
size_t getStackHighWaterMark() const override
Definition: DynamicThread.cpp:130
size_t stackSize
size of stack, bytes
Definition: DynamicThreadParameters.hpp:85
SchedulingPolicy
scheduling policy of the thread
Definition: SchedulingPolicy.hpp:26
SchedulingPolicy getSchedulingPolicy() const override
Definition: DynamicThread.cpp:120
uint8_t priority
thread's priority, 0 - lowest, UINT8_MAX - highest
Definition: DynamicThreadParameters.hpp:91
DynamicThreadBase(size_t stackSize, bool canReceiveSignals, size_t queuedSignals, size_t signalActions, uint8_t priority, SchedulingPolicy schedulingPolicy, DynamicThread &owner, Function &&function, Args &&... args)
DynamicThreadBase's constructor.
Definition: DynamicThreadBase.hpp:239
bool canReceiveSignals
selects whether reception of signals is enabled (true) or disabled (false) for this thread
Definition: DynamicThreadParameters.hpp:88
int join() override
Waits for thread termination.
Definition: DynamicThread.cpp:160
ThreadState getState() const override
Definition: DynamicThread.cpp:150
void setPriority(uint8_t priority, bool alwaysBehind={}) override
Changes priority of thread.
Definition: DynamicThread.cpp:186
Top-level namespace of distortos project.
Definition: buttons.hpp:33
void setSchedulingPolicy(SchedulingPolicy schedulingPolicy) override
Definition: DynamicThread.cpp:196
~DynamicThread() override
DynamicThread's destructor.
Definition: DynamicThread.cpp:34
size_t getStackSize() const override
Definition: DynamicThread.cpp:140
DynamicThreadParameters struct is a helper with parameters for DynamicThread's constructor.
Definition: DynamicThreadParameters.hpp:32
ThreadIdentifier getIdentifier() const override
Definition: DynamicThread.cpp:86
std::unique_ptr< internal::DynamicThreadBase > detachableThread_
internal thread object
Definition: DynamicThread.hpp:270
uint8_t getPriority() const override
Definition: DynamicThread.cpp:110
DynamicThread(size_t stackSize, bool canReceiveSignals, size_t queuedSignals, size_t signalActions, uint8_t priority, SchedulingPolicy schedulingPolicy, Function &&function, Args &&... args)
DynamicThread's constructor.
Definition: DynamicThread.hpp:397
size_t signalActions
Definition: DynamicThreadParameters.hpp:82
DynamicThread class is a type-erased interface for thread that has dynamic storage for bound function...
Definition: DynamicThread.hpp:32
int detach() override
Detaches the thread.
Definition: DynamicThread.cpp:39
SignalSet getPendingSignalSet() const override
Gets set of currently pending signals.
Definition: DynamicThread.cpp:98
DynamicThread makeDynamicThread(const size_t stackSize, const bool canReceiveSignals, const size_t queuedSignals, const size_t signalActions, const uint8_t priority, const SchedulingPolicy schedulingPolicy, Function &&function, Args &&... args)
Helper factory function to make DynamicThread object.
Definition: DynamicThread.hpp:306
Thread class is a pure abstract interface for threads.
Definition: Thread.hpp:34
ThreadState
state of the thread
Definition: ThreadState.hpp:28
int start()
Starts the thread.
Definition: DynamicThread.cpp:206
uint8_t getEffectivePriority() const override
Definition: DynamicThread.cpp:76