From 14a629c0a15dcc095a4d413e4782bc87fc568fdd Mon Sep 17 00:00:00 2001 From: LaG1924 <12997935+LaG1924@users.noreply.github.com> Date: Fri, 12 Jan 2018 11:54:50 +0500 Subject: Single mutex for event system --- src/Event.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'src/Event.cpp') diff --git a/src/Event.cpp b/src/Event.cpp index e8531d4..7604609 100644 --- a/src/Event.cpp +++ b/src/Event.cpp @@ -4,32 +4,32 @@ std::list EventSystem::listeners; std::recursive_mutex EventSystem::listenersMutex; EventListener::EventListener() { - EventSystem::listenersMutex.lock(); + std::lock_guard lock(EventSystem::listenersMutex); EventSystem::listeners.push_back(this); - EventSystem::listenersMutex.unlock(); } EventListener::~EventListener() { - EventSystem::listenersMutex.lock(); + std::lock_guard lock(EventSystem::listenersMutex); EventSystem::listeners.remove(this); - EventSystem::listenersMutex.unlock(); } void EventListener::HandleEvent() { - mutex.lock(); + if (!NotEmpty()) + return; + + std::lock_guard lock(EventSystem::listenersMutex); Event event = events.front(); events.pop(); if (handlers[event.id]) { handlers[event.id](event); } - mutex.unlock(); } void EventListener::HandleAllEvents() { if (!NotEmpty()) return; - mutex.lock(); + std::lock_guard lock(EventSystem::listenersMutex); while (!events.empty()) { Event event = events.front(); events.pop(); @@ -37,7 +37,6 @@ void EventListener::HandleAllEvents() { handlers[event.id](event); } } - mutex.unlock(); } bool EventListener::NotEmpty() { @@ -46,10 +45,14 @@ bool EventListener::NotEmpty() { } void EventListener::WaitEvent() { - mutex.lock(); + std::lock_guard lock(EventSystem::listenersMutex); while (events.empty()) { mutex.unlock(); mutex.lock(); } - mutex.unlock(); -} \ No newline at end of file +} + +void EventListener::RegisterHandler(size_t eventId, const EventListener::HandlerType &data) { + std::lock_guard lock(EventSystem::listenersMutex); + handlers[eventId] = data; +} -- cgit v1.2.3