diff --git a/src/dispatcher.cc b/src/dispatcher.cc index d1b6ee5..e45d4d8 100644 --- a/src/dispatcher.cc +++ b/src/dispatcher.cc @@ -3,9 +3,8 @@ Dispatcher::Dispatcher() { connection=dispatcher.connect([this] { std::unique_lock lock(functions_mutex); - for(auto &function: functions) { + for(auto &function: functions) function(); - } functions.clear(); }); } @@ -16,14 +15,6 @@ Dispatcher::~Dispatcher() { functions.clear(); } -void Dispatcher::post(std::function &&function) { - { - std::unique_lock lock(functions_mutex); - functions.emplace_back(function); - } - dispatcher(); -} - void Dispatcher::disconnect() { connection.disconnect(); } diff --git a/src/dispatcher.h b/src/dispatcher.h index 502c330..bb38f20 100644 --- a/src/dispatcher.h +++ b/src/dispatcher.h @@ -2,18 +2,27 @@ #define DISPATCHER_H_ #include #include -#include +#include class Dispatcher { private: - std::vector> functions; + std::list> functions; std::mutex functions_mutex; Glib::Dispatcher dispatcher; sigc::connection connection; public: Dispatcher(); ~Dispatcher(); - void post(std::function &&function); + + template + void post(T &&function) { + { + std::unique_lock lock(functions_mutex); + functions.emplace_back(std::forward(function)); + } + dispatcher(); + } + void disconnect(); };