1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-07-13 01:20:34 +02:00

* fixed remaining part of #1071 — the screen surface has always to be created in the main thread

* hold events in the queue by value (less ptr jugglery)
This commit is contained in:
Michał W. Urbańczyk
2012-09-11 14:25:19 +00:00
parent d935e87dd8
commit 96a92d0f45
8 changed files with 54 additions and 52 deletions

View File

@ -9,7 +9,7 @@
#include "../CConfigHandler.h"
extern SDL_Surface * screenBuf, * screen2, * screen;
extern std::queue<SDL_Event*> events;
extern std::queue<SDL_Event> events;
extern boost::mutex eventsM;
boost::thread_specific_ptr<bool> inGuiThread;
@ -126,7 +126,7 @@ void CGuiHandler::handleEvents()
{
while(true)
{
SDL_Event *ev = NULL;
SDL_Event ev;
boost::unique_lock<boost::mutex> lock(eventsM);
if(!events.size())
{
@ -137,8 +137,7 @@ void CGuiHandler::handleEvents()
ev = events.front();
events.pop();
}
handleEvent(ev);
delete ev;
handleEvent(&ev);
}
}
@ -448,6 +447,14 @@ bool CGuiHandler::amIGuiThread()
return inGuiThread.get() && *inGuiThread;
}
void CGuiHandler::pushSDLEvent(int type, int usercode)
{
SDL_Event event;
event.type = type;
event.user.code = usercode; // not necessarily used
SDL_PushEvent(&event);
}
CFramerateManager::CFramerateManager(int rate)
{
this->rate = rate;