diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2006-02-03 15:19:58 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2006-02-03 15:19:58 +0000 |
commit | fc72c5375813a6bbc0845aca984147a944a7e62a (patch) | |
tree | 347a6a9297f9f4d3131c8268f450d6ba227d0246 /uisimulator/sdl/thread-sdl.c | |
parent | 347992e9d93ed0f91cde7e2d580cfdc8d5eb95f4 (diff) |
Patch #1417462 by Dan Everton - Improved SDL simulator
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8546 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/sdl/thread-sdl.c')
-rw-r--r-- | uisimulator/sdl/thread-sdl.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/uisimulator/sdl/thread-sdl.c b/uisimulator/sdl/thread-sdl.c new file mode 100644 index 0000000000..41a60c9bc5 --- /dev/null +++ b/uisimulator/sdl/thread-sdl.c @@ -0,0 +1,78 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2006 Dan Everton + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include <time.h> +#include <SDL.h> +#include <SDL_thread.h> +#include <stdlib.h> +#include "thread-sdl.h" +#include "kernel.h" +#include "debug.h" + +SDL_Thread *threads[256]; +int threadCount = 0; +long current_tick = 0; +SDL_mutex *m; + +void yield(void) +{ + SDL_mutexV(m); + SDL_Delay(1); + SDL_mutexP(m); +} + +void sim_sleep(int ticks) +{ + SDL_mutexV(m); + SDL_Delay((1000/HZ) * ticks); + SDL_mutexP(m); +} + +int runthread(void *data) +{ + SDL_mutexV(m); + ((void(*)())data) (); + SDL_mutexV(m); + return 0; +} + +int create_thread(void (*fp)(void), void* sp, int stk_size) +{ + /** Avoid compiler warnings */ + (void)sp; + (void)stk_size; + + if (threadCount == 256) { + return -1; + } + + threads[threadCount++] = SDL_CreateThread(runthread, fp); + + return 0; +} + +void init_threads(void) +{ + m = SDL_CreateMutex(); + + if (SDL_mutexP(m) == -1) { + fprintf(stderr, "Couldn't lock mutex\n"); + exit(-1); + } +} |