diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2010-04-28 14:39:26 +0200 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2013-01-05 17:17:48 +0100 |
commit | 25f24d3406750598ab091bc2ce98585decfd799d (patch) | |
tree | 4b44b3858d9a5a6e521fd42df2085e0fa205bc97 /src/menu/application.cpp | |
parent | 799aa2a252d04e730e598ebb46f3a66f530717c0 (diff) | |
download | usdx-25f24d3406750598ab091bc2ce98585decfd799d.tar.gz usdx-25f24d3406750598ab091bc2ce98585decfd799d.tar.xz usdx-25f24d3406750598ab091bc2ce98585decfd799d.zip |
added event_manager
event_manager for passing the events from the SDL thread to the event
thread
Diffstat (limited to '')
-rw-r--r-- | src/menu/application.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
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 <exception> 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) |