From 25f24d3406750598ab091bc2ce98585decfd799d Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 28 Apr 2010 14:39:26 +0200 Subject: added event_manager event_manager for passing the events from the SDL thread to the event thread --- src/menu/application.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/menu/application.cpp') diff --git a/src/menu/application.cpp b/src/menu/application.cpp index 00b9a6f3..670e4c77 100644 --- a/src/menu/application.cpp +++ b/src/menu/application.cpp @@ -25,6 +25,7 @@ */ #include "application.hpp" +#include "event_manager.hpp" #include namespace usdx @@ -84,6 +85,8 @@ namespace usdx void Application::main_loop(SDL_Surface* display) { SDL_Event event; + EventManager event_manager; + boost::thread event_thread(boost::bind(&EventManager::handle_events, &event_manager)); running = true; while (running) { @@ -94,17 +97,26 @@ namespace usdx LOG4CXX_TRACE(log, L"repaint"); // poll current events - while (SDL_PollEvent(&event)) { + while (event_manager.available() && SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: running = false; - return; + event_thread.interrupt(); + break; + + default: + event_manager.add_event(event); + break; } } - // limit frames - SDL_framerateDelay(fps_manager); + if (running) { + // limit frames + SDL_framerateDelay(fps_manager); + } } + + event_thread.join(); } void Application::run(void) -- cgit v1.2.3