Mercurial > almixer_isolated
annotate Isolated/SimpleThreadWindows.c @ 59:7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Documentation found here:
http://msdn.microsoft.com/en-us/library/kdzttdcb(v=vs.110).aspx
Web searches indicated I should be using _beginthreadex instead of CreateThread for C runtime compatibility.
author | Eric Wing <ewing . public |-at-| gmail . com> |
---|---|
date | Fri, 08 Jun 2012 01:04:51 -0700 |
parents | |
children | f7acef5a80fe |
rev | line source |
---|---|
59
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
1 /* Copyright PlayControl Software LLC / Eric Wing. |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
2 */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
3 #include "SimpleThread.h" |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
4 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
5 #define WIN32_LEAN_AND_MEAN |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
6 #include <process.h> |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
7 #include <windows.h> |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
8 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
9 #if defined(DEBUG) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
10 #include <stdio.h> |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
11 #define THRDDBG(x) printf x |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
12 #else |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
13 #define THRDDBG(x) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
14 #endif |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
15 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
16 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
17 struct SimpleThread |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
18 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
19 unsigned threadID; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
20 uintptr_t nativeThread; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
21 unsigned threadStatus; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
22 // void* userData; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
23 }; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
24 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
25 typedef struct SimpleThreadArguments |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
26 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
27 int (*userFunction)(void*); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
28 void* userData; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
29 SimpleThread* simpleThread; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
30 } SimpleThreadArguments; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
31 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
32 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
33 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
34 static unsigned Internal_RunThread(void* user_data) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
35 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
36 int (*user_function)(void*); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
37 void* function_user_data; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
38 int* status_val; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
39 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
40 #if 0 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
41 /* disable signals */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
42 sigset_t disable_set; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
43 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
44 /* |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
45 in the main thread, set up the desired signal mask, common to most threads |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
46 any newly created threads will inherit this signal mask |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
47 */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
48 sigemptyset(&disable_set); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
49 sigaddset(&disable_set, SIGHUP); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
50 sigaddset(&disable_set, SIGINT); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
51 sigaddset(&disable_set, SIGUSR1); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
52 sigaddset(&disable_set, SIGUSR2); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
53 sigaddset(&disable_set, SIGALRM); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
54 sigaddset(&disable_set, SIGQUIT); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
55 sigaddset(&disable_set, SIGPIPE); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
56 sigaddset(&disable_set, SIGTERM); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
57 sigaddset(&disable_set, SIGCHLD); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
58 sigaddset(&disable_set, SIGWINCH); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
59 sigaddset(&disable_set, SIGVTALRM); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
60 sigaddset(&disable_set, SIGPROF); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
61 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
62 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
63 /* block out these signals */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
64 sigprocmask(SIG_BLOCK, &disable_set, NULL); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
65 #endif |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
66 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
67 SimpleThreadArguments* simple_thread_arguments = (SimpleThreadArguments*)user_data; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
68 /* It looks like the last parameter of _beginthreadex sets the threadID for me */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
69 /* simple_thread_arguments->simpleThread->threadID = SimpleThread_GetCurrentThreadID(); */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
70 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
71 user_function = simple_thread_arguments->userFunction; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
72 function_user_data = simple_thread_arguments->userData; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
73 status_val = &simple_thread_arguments->simpleThread->threadStatus; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
74 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
75 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
76 /* I hope this is safe to delete on a different thread than it was created for. */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
77 free(simple_thread_arguments); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
78 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
79 *status_val = user_function(function_user_data); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
80 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
81 _endthreadex( 0 ); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
82 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
83 return NULL; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
84 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
85 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
86 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
87 SimpleThread* SimpleThread_CreateThread(int (*user_function)(void*), void* user_data) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
88 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
89 int ret_val; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
90 SimpleThread* new_thread; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
91 SimpleThreadArguments* simple_thread_arguments; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
92 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
93 new_thread = (SimpleThread*)malloc(sizeof(SimpleThread)); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
94 if(NULL == new_thread) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
95 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
96 THRDDBG(("Out of memory.\n")); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
97 return NULL; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
98 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
99 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
100 simple_thread_arguments = (SimpleThreadArguments*)malloc(sizeof(SimpleThreadArguments)); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
101 if(NULL == simple_thread_arguments) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
102 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
103 THRDDBG(("Out of memory.\n")); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
104 free(new_thread); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
105 return NULL; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
106 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
107 simple_thread_arguments->userFunction = user_function; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
108 simple_thread_arguments->userData = user_data; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
109 simple_thread_arguments->simpleThread = new_thread; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
110 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
111 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
112 new_thread->nativeThread = _beginthreadex(NULL, 0, &Internal_RunThread, simple_thread_arguments, 0, &new_thread->threadID); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
113 if(0 == ret_val) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
114 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
115 THRDDBG(("_beginthreadex failed with: %d\n", errno)); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
116 free(simple_thread_arguments); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
117 free(new_thread); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
118 return NULL; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
119 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
120 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
121 return new_thread; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
122 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
123 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
124 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
125 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
126 size_t SimpleThread_GetCurrentThreadID() |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
127 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
128 return (size_t)GetCurrentThreadId(); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
129 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
130 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
131 void SimpleThread_WaitThread(SimpleThread* simple_thread, int* thread_status) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
132 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
133 int ret_val; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
134 if(NULL == simple_thread) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
135 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
136 THRDDBG(("SimpleThread_WaitThread was passed NULL\n")); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
137 return; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
138 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
139 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
140 WaitForSingleObject(simple_thread->nativeThread, INFINITE); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
141 CloseHandle(simple_thread->nativeThread); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
142 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
143 if(NULL != thread_status) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
144 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
145 *thread_status = (int)simple_thread->threadStatus; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
146 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
147 free(simple_thread); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
148 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
149 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
150 size_t SimpleThread_GetThreadID(SimpleThread* simple_thread) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
151 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
152 if(NULL == simple_thread) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
153 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
154 THRDDBG(("SimpleThread_GetThreadID was passed NULL\n")); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
155 return 0; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
156 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
157 return (size_t)simple_thread->threadID; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
158 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
159 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
160 /* TODO: Figure out portable/normalized range for levels */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
161 int SimpleThread_GetThreadPriority(SimpleThread* simple_thread) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
162 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
163 struct sched_param schedule_param; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
164 int sched_policy; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
165 int ret_val; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
166 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
167 if(NULL == simple_thread) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
168 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
169 THRDDBG(("SimpleThread_GetThreadPriority was passed NULL\n")); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
170 return THREAD_PRIORITY_ERROR_RETURN; /* Windows ranges seem to go from -15 to +15 */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
171 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
172 ret_val = GetThreadPriority(simple_thread->nativeThread); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
173 if(THREAD_PRIORITY_ERROR_RETURN == ret_val) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
174 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
175 THRDDBG(("SimpleThread_GetThreadPriority GetThreadPriority failed with: %d\n", ret_val)); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
176 return THREAD_PRIORITY_ERROR_RETURN; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
177 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
178 return ret_val; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
179 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
180 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
181 /* TODO: Figure out portable/normalized range for levels */ |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
182 void SimpleThread_SetThreadPriority(SimpleThread* simple_thread, int priority_level) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
183 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
184 struct sched_param schedule_param; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
185 BOOL ret_val; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
186 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
187 if(NULL == simple_thread) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
188 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
189 THRDDBG(("SimpleThread_SetThreadPriority was passed NULL\n")); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
190 return; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
191 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
192 |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
193 ret_val = SetThreadPriority(simple_thread->nativeThread, priority_level); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
194 if(0 == ret_val) |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
195 { |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
196 THRDDBG(("SimpleThread_SetThreadPriority SetThreadPriority failed")); |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
197 return; |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
198 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
199 } |
7d508c8cd75a
New implementation backend for SimpleThread using native Windows threading APIs.
Eric Wing <ewing . public |-at-| gmail . com>
parents:
diff
changeset
|
200 |