forked from len0rd/rockbox
Implement cooperative threads on hosted platforms using C code.
This replaces SDL threads with real cooperative threads, which are less cpu intensive and allow priority scheduling. The backend for context switching is dependant on the host (sigaltstack/longjmp on Unix, Fibers on Windows). configure has options to force or disallow SDL threads. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29327 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
3926c30705
commit
6d85de3419
13 changed files with 580 additions and 27 deletions
|
|
@ -174,10 +174,13 @@ void switch_thread(void)
|
|||
__attribute__((noinline));
|
||||
|
||||
/****************************************************************************
|
||||
* Processor-specific section - include necessary core support
|
||||
* Processor/OS-specific section - include necessary core support
|
||||
*/
|
||||
#if defined(ANDROID)
|
||||
#include "thread-android-arm.c"
|
||||
|
||||
#if defined(HAVE_WIN32_FIBER_THREADS)
|
||||
#include "thread-win32.c"
|
||||
#elif defined(HAVE_SIGALTSTACK_THREADS)
|
||||
#include "thread-unix.c"
|
||||
#elif defined(CPU_ARM)
|
||||
#include "thread-arm.c"
|
||||
#if defined (CPU_PP)
|
||||
|
|
@ -2308,6 +2311,9 @@ void init_threads(void)
|
|||
thread_exit();
|
||||
#endif /* NUM_CORES */
|
||||
}
|
||||
#ifdef INIT_MAIN_THREAD
|
||||
init_main_thread(&thread->context);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Shared stack scan helper for thread_stack_usage and idle_stack_usage */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue