-
Notifications
You must be signed in to change notification settings - Fork 40
/
ThreadUnix.ooc
39 lines (29 loc) · 1.03 KB
/
ThreadUnix.ooc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import ../Thread
include pthread, unistd
version(unix || apple) {
/* covers & extern functions */
PThread: cover from pthread_t
version(gc) {
pthread_create: extern(GC_pthread_create) func (PThread*, Pointer, startRoutine: Pointer, userArgument: Pointer) -> Int
pthread_join: extern(GC_pthread_join) func (thread: PThread, retval: Pointer*) -> Int
}
version (!gc) {
pthread_create: extern func (PThread*, Pointer, startRoutine: Pointer, userArgument: Pointer) -> Int
pthread_join: extern func (thread: PThread, retval: Pointer*) -> Int
}
/**
* pthreads implementation of threads.
*
* :author: Amos Wenger (nddrylliog)
*/
ThreadUnix: class extends Thread {
pthread: PThread
init: func ~unix (=_code) {}
start: func -> Int {
return pthread_create(pthread&, null, _code as Closure thunk, _code as Closure context)
}
wait: func -> Int {
return pthread_join(pthread, null)
}
}
}