2002-09-03 Dick Porter <dick@ximian.com>
[mono.git] / mono / io-layer / threads.h
1 /*
2  * threads.h:  Thread handles
3  *
4  * Author:
5  *      Dick Porter (dick@ximian.com)
6  *
7  * (C) 2002 Ximian, Inc.
8  */
9
10 #ifndef _WAPI_THREADS_H_
11 #define _WAPI_THREADS_H_
12
13 #include <glib.h>
14
15 #include <mono/io-layer/handles.h>
16 #include <mono/io-layer/io.h>
17 #include <mono/io-layer/status.h>
18 #include <mono/io-layer/processes.h>
19 #include <mono/io-layer/access.h>
20
21 #define TLS_MINIMUM_AVAILABLE 64
22 #define TLS_OUT_OF_INDEXES 0xFFFFFFFF
23
24 #define STILL_ACTIVE STATUS_PENDING
25
26
27 #define THREAD_TERMINATE                0x0001
28 #define THREAD_SUSPEND_RESUME           0x0002
29 #define THREAD_GET_CONTEXT              0x0008
30 #define THREAD_SET_CONTEXT              0x0010
31 #define THREAD_SET_INFORMATION          0x0020
32 #define THREAD_QUERY_INFORMATION        0x0040
33 #define THREAD_SET_THREAD_TOKEN         0x0080
34 #define THREAD_IMPERSONATE              0x0100
35 #define THREAD_DIRECT_IMPERSONATION     0x0200
36 #define THREAD_ALL_ACCESS               (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff)
37
38 typedef guint32 (*WapiThreadStart)(gpointer);
39
40 extern gpointer CreateThread(WapiSecurityAttributes *security,
41                              guint32 stacksize, WapiThreadStart start,
42                              gpointer param, guint32 create, guint32 *tid);
43 extern gpointer OpenThread (guint32 access, gboolean inherit, guint32 tid);
44 extern void ExitThread(guint32 exitcode) G_GNUC_NORETURN;
45 extern gboolean GetExitCodeThread(gpointer handle, guint32 *exitcode);
46 extern guint32 GetCurrentThreadId(void);
47 extern gpointer GetCurrentThread(void);
48 extern guint32 ResumeThread(gpointer handle);
49 extern guint32 SuspendThread(gpointer handle);
50 extern guint32 TlsAlloc(void);
51 extern gboolean TlsFree(guint32 idx);
52 extern gpointer TlsGetValue(guint32 idx);
53 extern gboolean TlsSetValue(guint32 idx, gpointer value);
54 extern void Sleep(guint32 ms);
55 extern void SleepEx(guint32 ms, gboolean);
56
57 #endif /* _WAPI_THREADS_H_ */