Browse Source

Optimisation of Dispatcher class

merge-requests/365/head
eidheim 8 years ago
parent
commit
d03ce4968c
  1. 11
      src/dispatcher.cc
  2. 15
      src/dispatcher.h

11
src/dispatcher.cc

@ -3,9 +3,8 @@
Dispatcher::Dispatcher() { Dispatcher::Dispatcher() {
connection=dispatcher.connect([this] { connection=dispatcher.connect([this] {
std::unique_lock<std::mutex> lock(functions_mutex); std::unique_lock<std::mutex> lock(functions_mutex);
for(auto &function: functions) { for(auto &function: functions)
function(); function();
}
functions.clear(); functions.clear();
}); });
} }
@ -16,14 +15,6 @@ Dispatcher::~Dispatcher() {
functions.clear(); functions.clear();
} }
void Dispatcher::post(std::function<void()> &&function) {
{
std::unique_lock<std::mutex> lock(functions_mutex);
functions.emplace_back(function);
}
dispatcher();
}
void Dispatcher::disconnect() { void Dispatcher::disconnect() {
connection.disconnect(); connection.disconnect();
} }

15
src/dispatcher.h

@ -2,18 +2,27 @@
#define DISPATCHER_H_ #define DISPATCHER_H_
#include <gtkmm.h> #include <gtkmm.h>
#include <mutex> #include <mutex>
#include <vector> #include <list>
class Dispatcher { class Dispatcher {
private: private:
std::vector<std::function<void()>> functions; std::list<std::function<void()>> functions;
std::mutex functions_mutex; std::mutex functions_mutex;
Glib::Dispatcher dispatcher; Glib::Dispatcher dispatcher;
sigc::connection connection; sigc::connection connection;
public: public:
Dispatcher(); Dispatcher();
~Dispatcher(); ~Dispatcher();
void post(std::function<void()> &&function);
template<typename T>
void post(T &&function) {
{
std::unique_lock<std::mutex> lock(functions_mutex);
functions.emplace_back(std::forward<T>(function));
}
dispatcher();
}
void disconnect(); void disconnect();
}; };

Loading…
Cancel
Save