summaryrefslogtreecommitdiffstats
path: root/src/Event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Event.cpp')
-rw-r--r--src/Event.cpp34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/Event.cpp b/src/Event.cpp
index 7604609..08c9ee7 100644
--- a/src/Event.cpp
+++ b/src/Event.cpp
@@ -17,9 +17,10 @@ void EventListener::HandleEvent() {
if (!NotEmpty())
return;
- std::lock_guard<std::recursive_mutex> lock(EventSystem::listenersMutex);
+ std::lock_guard<std::recursive_mutex> eventsLock (eventsMutex);
Event event = events.front();
- events.pop();
+ events.pop();
+ std::lock_guard<std::recursive_mutex> handlersLock (handlersMutex);
if (handlers[event.id]) {
handlers[event.id](event);
}
@@ -29,7 +30,8 @@ void EventListener::HandleAllEvents() {
if (!NotEmpty())
return;
- std::lock_guard<std::recursive_mutex> lock(EventSystem::listenersMutex);
+ std::lock_guard<std::recursive_mutex> eventsLock (eventsMutex);
+ std::lock_guard<std::recursive_mutex> handlersLock (handlersMutex);
while (!events.empty()) {
Event event = events.front();
events.pop();
@@ -40,19 +42,27 @@ void EventListener::HandleAllEvents() {
}
bool EventListener::NotEmpty() {
+ PollEvents();
+ std::lock_guard<std::recursive_mutex> eventsLock (eventsMutex);
bool ret = !events.empty();
return ret;
}
-void EventListener::WaitEvent() {
- std::lock_guard<std::recursive_mutex> lock(EventSystem::listenersMutex);
- while (events.empty()) {
- mutex.unlock();
- mutex.lock();
- }
-}
-
void EventListener::RegisterHandler(size_t eventId, const EventListener::HandlerType &data) {
- std::lock_guard<std::recursive_mutex> lock(EventSystem::listenersMutex);
+ std::lock_guard<std::recursive_mutex> handlersLock (handlersMutex);
handlers[eventId] = data;
}
+
+void EventListener::PollEvents() {
+ std::lock_guard<std::recursive_mutex> rawLock (rawEventsMutex);
+ if (rawEvents.empty())
+ return;
+ std::lock_guard<std::recursive_mutex> eventsLock (eventsMutex);
+ std::lock_guard<std::recursive_mutex> handlersLock (handlersMutex);
+ while (!rawEvents.empty()) {
+ Event event = rawEvents.front();
+ rawEvents.pop();
+ if (handlers[event.id])
+ events.push(event);
+ }
+}