16#include "pw_async/dispatcher.h"
17#include "pw_async/task.h"
18#include "pw_sync/interrupt_spin_lock.h"
19#include "pw_sync/lock_annotations.h"
20#include "pw_sync/timed_thread_notification.h"
21#include "pw_thread/thread_core.h"
36 void RunUntil(chrono::SystemClock::time_point end_time);
53 void Run() override PW_LOCKS_EXCLUDED(lock_);
56 void PostAt(
Task& task, chrono::SystemClock::time_point time) override;
57 bool Cancel(
Task& task) override PW_LOCKS_EXCLUDED(lock_);
60 chrono::SystemClock::time_point
now()
override {
70 PW_LOCKS_EXCLUDED(lock_);
75 void PostTaskInternal(backend::NativeTask& task,
76 chrono::SystemClock::time_point time_due)
77 PW_LOCKS_EXCLUDED(lock_);
81 void MaybeSleep() PW_EXCLUSIVE_LOCKS_REQUIRED(lock_);
85 void MaybeSleepUntil(std::optional<chrono::SystemClock::time_point> wake_time)
86 PW_EXCLUSIVE_LOCKS_REQUIRED(lock_);
89 void ExecuteDueTasks() PW_EXCLUSIVE_LOCKS_REQUIRED(lock_);
93 void DrainTaskQueue() PW_EXCLUSIVE_LOCKS_REQUIRED(lock_);
95 sync::InterruptSpinLock lock_;
96 sync::TimedThreadNotification timed_notification_;
97 bool stop_requested_ PW_GUARDED_BY(lock_) = false;
99 IntrusiveList<backend::NativeTask> task_queue_ PW_GUARDED_BY(lock_);
BasicDispatcher is a generic implementation of Dispatcher.
Definition: dispatcher.h:26
void RunUntilIdle()
Execute all runnable tasks and return without waiting.
void RunUntil(chrono::SystemClock::time_point end_time)
virtual void ExecuteTask(backend::NativeTask &task, Status status)
chrono::SystemClock::time_point now() override
Returns the current time.
Definition: dispatcher.h:60
void PostAt(Task &task, chrono::SystemClock::time_point time) override
void RunFor(chrono::SystemClock::duration duration)
bool Cancel(Task &task) override
Definition: dispatcher.h:45
Definition: intrusive_list.h:82
static time_point now() noexcept
This is thread and IRQ safe. This must be provided by the backend.
Definition: system_clock.h:113
std::chrono::duration< rep, period > duration
Alias for durations representable with this clock.
Definition: system_clock.h:86