Mercurial > sdl-ios-xcode
diff src/events/SDL_events.c @ 3072:9da8f57ab92c
Fixed bug #684
Reworked Pierre's patch a little bit, which added SDL_WaitEventTimeout()
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 17 Feb 2009 05:59:40 +0000 |
parents | 0b160c970b7e |
children | 22ac66da0765 |
line wrap: on
line diff
--- a/src/events/SDL_events.c Tue Feb 17 05:57:54 2009 +0000 +++ b/src/events/SDL_events.c Tue Feb 17 05:59:40 2009 +0000 @@ -399,18 +399,24 @@ int SDL_PollEvent(SDL_Event * event) { - SDL_PumpEvents(); - - /* We can't return -1, just return 0 (no event) on error */ - if (SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_ALLEVENTS) <= 0) - return 0; - return 1; + return SDL_WaitEventTimeout(event, 0); } int SDL_WaitEvent(SDL_Event * event) { - while (1) { + return SDL_WaitEventTimeout(event, -1); +} + +int +SDL_WaitEventTimeout(SDL_Event * event, int timeout) +{ + Uint32 expiration = 0; + + if (timeout > 0) + expiration = SDL_GetTicks() + timeout; + + for (;;) { SDL_PumpEvents(); switch (SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_ALLEVENTS)) { case -1: @@ -418,7 +424,16 @@ case 1: return 1; case 0: + if (timeout == 0) { + /* Polling and no events, just return */ + return 0; + } + if (timeout > 0 && ((int) (SDL_GetTicks() - expiration) >= 0)) { + /* Timeout expired and no events */ + return 0; + } SDL_Delay(10); + break; } } }