14 #include <condition_variable>
25 template<
typename T>
class Promise;
120 std::packaged_task<void()>
task;
153 message(std::move(other.message)),
task(std::move(other.task)) {}
164 if (
this != &other) {
167 message = std::move(other.message);
168 task = std::move(other.task);
229 bool enqueueMessage(
const std::shared_ptr<Message>& message, int64_t whenUs);
242 std::shared_ptr<Message>
poll();
270 template<
typename F,
typename... Args>
271 auto enqueueFunction(F&& func, Args&&... args) -> std::future<
decltype(func(args...))>;
290 template<
typename F,
typename... Args>
355 std::optional<QueueItem>
pollNext();
378 bool hasMessage(
const std::shared_ptr<Handler>& h, int32_t what,
void* obj);
393 std::deque<QueueItem> mQueue;
394 std::shared_ptr<Message> mCurrentMessage;
398 std::condition_variable mQueueChanged;
Thread-safe unified queue for messages and function tasks with timed execution.
EventQueue()
Constructor - initializes empty queue.
std::optional< QueueItem > pollNext()
Poll for next ready queue item (unified interface)
int64_t uptimeMicros()
Get current system uptime in microseconds.
~EventQueue()
Destructor - cleanup remaining items.
std::shared_ptr< Message > poll()
Poll for next ready message (legacy compatibility)
QueueItemType
Type discriminator for queue items.
@ FUNCTION
Function task with std::packaged_task.
@ MESSAGE
Traditional message with handler.
void quit()
Request queue shutdown.
auto enqueueFunctionDelayed(int64_t delayMs, F &&func, Args &&... args) -> std::future< decltype(func(args...))>
Enqueue function for delayed asynchronous execution.
bool hasMessage(const std::shared_ptr< Handler > &h, int32_t what, void *obj)
Check for specific message in queue.
bool isQuit()
Check if quit message was received.
bool enqueueMessage(const std::shared_ptr< Message > &message, int64_t whenUs)
Enqueue traditional message for timed execution.
auto enqueueFunction(F &&func, Args &&... args) -> std::future< decltype(func(args...))>
Enqueue function for immediate asynchronous execution.
Promise< T > enqueuePromise()
Create and enqueue promise for manual resolution.
Type-safe promise for asynchronous result handling with continuation chaining.
Software Timer namespace containing all timer-related classes.
Unified queue item supporting both messages and function tasks.
QueueItem & operator=(const QueueItem &)=delete
Copy assignment - deleted (move-only semantics)
QueueItem(const QueueItem &)=delete
Copy constructor - deleted (move-only semantics)
QueueItem(std::packaged_task< void()> &&t, int64_t when)
Constructor for function queue items.
QueueItem(QueueItem &&other) noexcept
Move constructor - transfers ownership of queue item.
int64_t whenUs
Execution time in microseconds (absolute)
std::shared_ptr< Message > message
Message payload (for MESSAGE type)
QueueItem(std::shared_ptr< Message > msg, int64_t when)
Constructor for message queue items.
QueueItemType type
Type discriminator for queue item.
std::packaged_task< void()> task
Function task (for FUNCTION type)
QueueItem & operator=(QueueItem &&other) noexcept
Move assignment operator - transfers ownership.