/** * @file Dispatcher.h * * Dispatcher is a thread-safe code execution queue. */ #pragma once #include "MessageQueue.h" #include "Mutex.h" #include "EventFlag.h" #include #include namespace tt { typedef void (*Callback)(std::shared_ptr data); class Dispatcher { private: struct DispatcherMessage { Callback callback; std::shared_ptr context; // Can't use unique_ptr with void, so we use shared_ptr DispatcherMessage(Callback callback, std::shared_ptr context) : callback(callback), context(std::move(context)) {} ~DispatcherMessage() = default; }; Mutex mutex; std::queue> queue; EventFlag eventFlag; public: explicit Dispatcher(); ~Dispatcher(); void dispatch(Callback callback, std::shared_ptr context); uint32_t consume(uint32_t timeout_ticks); }; } // namespace