diff options
Diffstat (limited to 'src/Event.cpp')
-rw-r--r-- | src/Event.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
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<EventListener*> EventSystem::listeners; std::recursive_mutex EventSystem::listenersMutex; EventListener::EventListener() { - EventSystem::listenersMutex.lock(); + std::lock_guard<std::recursive_mutex> lock(EventSystem::listenersMutex); EventSystem::listeners.push_back(this); - EventSystem::listenersMutex.unlock(); } EventListener::~EventListener() { - EventSystem::listenersMutex.lock(); + std::lock_guard<std::recursive_mutex> lock(EventSystem::listenersMutex); EventSystem::listeners.remove(this); - EventSystem::listenersMutex.unlock(); } void EventListener::HandleEvent() { - mutex.lock(); + if (!NotEmpty()) + return; + + std::lock_guard<std::recursive_mutex> 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<std::recursive_mutex> 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<std::recursive_mutex> 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<std::recursive_mutex> lock(EventSystem::listenersMutex); + handlers[eventId] = data; +} |