|
|
|
|
@ -1,18 +1,27 @@
|
|
|
|
|
#include "dispatcher.h" |
|
|
|
|
#include <vector> |
|
|
|
|
|
|
|
|
|
Dispatcher::Dispatcher() { |
|
|
|
|
connection=dispatcher.connect([this] { |
|
|
|
|
std::vector<std::list<std::function<void()>>::iterator> its; |
|
|
|
|
{ |
|
|
|
|
std::unique_lock<std::mutex> lock(functions_mutex); |
|
|
|
|
for(auto &function: functions) |
|
|
|
|
function(); |
|
|
|
|
functions.clear(); |
|
|
|
|
its.reserve(functions.size()); |
|
|
|
|
for(auto it=functions.begin();it!=functions.end();++it) |
|
|
|
|
its.emplace_back(it); |
|
|
|
|
} |
|
|
|
|
for(auto &it: its) |
|
|
|
|
(*it)(); |
|
|
|
|
{ |
|
|
|
|
std::unique_lock<std::mutex> lock(functions_mutex); |
|
|
|
|
for(auto &it: its) |
|
|
|
|
functions.erase(it); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Dispatcher::~Dispatcher() { |
|
|
|
|
disconnect(); |
|
|
|
|
std::unique_lock<std::mutex> lock(functions_mutex); |
|
|
|
|
functions.clear(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Dispatcher::disconnect() { |
|
|
|
|
|