summaryrefslogtreecommitdiff
path: root/uisimulator/win32/thread-win32.c
diff options
context:
space:
mode:
authorMagnus Holmgren <magnushol@gmail.com>2005-07-19 20:43:21 +0000
committerMagnus Holmgren <magnushol@gmail.com>2005-07-19 20:43:21 +0000
commitd315dfb5b1a0852d8665ef88042a9272d0b14ac5 (patch)
tree09b541b54e1fd5a2c74287ea58f882aa2cdf25cf /uisimulator/win32/thread-win32.c
parentd83b659fa7206b150779274635a013def1ed850e (diff)
downloadrockbox-d315dfb5b1a0852d8665ef88042a9272d0b14ac5.tar.gz
rockbox-d315dfb5b1a0852d8665ef88042a9272d0b14ac5.zip
Made Win32 thread management similar to the X11 one (previously yield() could make a thread stop, seemingly forever).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7202 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/win32/thread-win32.c')
-rw-r--r--uisimulator/win32/thread-win32.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/uisimulator/win32/thread-win32.c b/uisimulator/win32/thread-win32.c
index ca973b6662..5c452d7735 100644
--- a/uisimulator/win32/thread-win32.c
+++ b/uisimulator/win32/thread-win32.c
@@ -17,18 +17,41 @@
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19 19
20#define WINDOWS_LEAN_AND_MEAN
20#include <windows.h> 21#include <windows.h>
21#include "thread-win32.h" 22#include "thread-win32.h"
23#include "kernel.h"
22 24
23HANDLE lpThreads[256]; 25HANDLE lpThreads[256];
24int nThreads = 0, 26int nThreads = 0,
25 nPos = 0; 27 nPos = 0;
26long current_tick = 0; 28long current_tick = 0;
29CRITICAL_SECTION CriticalSection;
27 30
28 31
32void yield(void)
33{
34 LeaveCriticalSection(&CriticalSection);
35 /* Don't need a sleep here, and it can be bad, e.g., for audio playback.
36 * Increases CPU usage a lot though. Only sleep if CPU isn't boosted
37 * could be a solution.
38 */
39 /* Sleep(1); */
40 EnterCriticalSection(&CriticalSection);
41}
42
43void sim_sleep(int ticks)
44{
45 LeaveCriticalSection(&CriticalSection);
46 Sleep((1000/HZ) * ticks);
47 EnterCriticalSection(&CriticalSection);
48}
49
29DWORD WINAPI runthread (LPVOID lpParameter) 50DWORD WINAPI runthread (LPVOID lpParameter)
30{ 51{
52 EnterCriticalSection(&CriticalSection);
31 ((void(*)())lpParameter) (); 53 ((void(*)())lpParameter) ();
54 LeaveCriticalSection(&CriticalSection);
32 return 0; 55 return 0;
33} 56}
34 57
@@ -54,4 +77,6 @@ int create_thread(void (*fp)(void), void* sp, int stk_size)
54 77
55void init_threads(void) 78void init_threads(void)
56{ 79{
80 InitializeCriticalSection(&CriticalSection);
81 EnterCriticalSection(&CriticalSection);
57} 82}