#pragma once #include "mutex.hpp" #include #include #include class Dispatcher { private: Mutex functions_mutex; std::list> functions GUARDED_BY(functions_mutex); Glib::Dispatcher dispatcher; sigc::connection connection; void connect(); public: /// Must be called from main GUI thread Dispatcher(); ~Dispatcher(); /// Queue function to main GUI thread. /// Can be called from any thread. template void post(T &&function) { LockGuard lock(functions_mutex); functions.emplace_back(std::forward(function)); dispatcher(); } /// Must be called from main GUI thread void disconnect(); /// Must be called from main GUI thread void reset(); };