#pragma once #include #include #include "delegates.hpp" class PostRunnables { std::queue runnables; std::recursive_mutex mutex; public: void postRunnable(runnable task) { std::lock_guard lock(mutex); runnables.push(std::move(task)); } void run() { std::queue tasksToRun; { std::lock_guard lock(mutex); std::swap(tasksToRun, runnables); } while (!tasksToRun.empty()) { auto& task = tasksToRun.front(); task(); tasksToRun.pop(); } } };