16 void operator()(osThreadId_t thread_id) { osThreadTerminate(thread_id); }
20 std::unique_ptr<std::remove_pointer_t<osThreadId_t>, Deleter>;
23 Thread(std::function<
void()> &&func) : func_{std::move(func)} {
24 osThreadAttr_t attr = {};
25 attr.stack_size = STACK_SIZE;
26 attr.priority = PRIORITY;
27 thread_id_ = ThreadId{osThreadNew(func_internal,
this, &attr)};
30 static inline void yield() { osThreadYield(); }
32 static inline void delay(uint32_t ticks) { osDelay(ticks); }
34 static inline void delay_until(uint32_t ticks) { osDelayUntil(ticks); }
36 [[noreturn]]
static inline void exit() { osThreadExit(); }
39 static constexpr uint32_t STACK_SIZE = 4096;
40 static constexpr osPriority_t PRIORITY = osPriorityNormal;
43 std::function<void()> func_;
45 static inline void func_internal(
void *thread) {