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() {
connection=dispatcher.connect([this] {
std::unique_lock<std::mutex> 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<void()> &&function) {
{
std::unique_lock<std::mutex> lock(functions_mutex);
functions.emplace_back(function);
}
dispatcher();
}
void Dispatcher::disconnect() {
connection.disconnect();
}

15
src/dispatcher.h

@ -2,18 +2,27 @@
#define DISPATCHER_H_
#include <gtkmm.h>
#include <mutex>
#include <vector>
#include <list>
class Dispatcher {
private:
std::vector<std::function<void()>> functions;
std::list<std::function<void()>> functions;
std::mutex functions_mutex;
Glib::Dispatcher dispatcher;
sigc::connection connection;
public:
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();
};

Loading…
Cancel
Save