37 #define MHD_THREADS_H 1
42 #elif defined(HAVE_STDLIB_H)
48 #if defined(MHD_USE_POSIX_THREADS)
51 # define HAVE_CONFIG_H 1
52 # ifndef MHD_USE_THREADS
53 # define MHD_USE_THREADS 1
55 #elif defined(MHD_USE_W32_THREADS)
56 # ifndef WIN32_LEAN_AND_MEAN
57 # define WIN32_LEAN_AND_MEAN 1
60 # ifndef MHD_USE_THREADS
61 # define MHD_USE_THREADS 1
64 # error No threading API is available.
67 #ifndef MHD_NO_THREAD_NAMES
68 # if defined(MHD_USE_POSIX_THREADS)
69 # if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \
70 defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) || \
71 defined(HAVE_PTHREAD_SETNAME_NP_DARWIN) || \
72 defined(HAVE_PTHREAD_SETNAME_NP_NETBSD) || \
73 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \
74 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI)
75 # define MHD_USE_THREAD_NAME_
77 # elif defined(MHD_USE_W32_THREADS)
80 # define MHD_USE_THREAD_NAME_
85 #if defined(MHD_USE_POSIX_THREADS)
86 typedef pthread_t MHD_thread_handle_;
87 #elif defined(MHD_USE_W32_THREADS)
88 typedef HANDLE MHD_thread_handle_;
91 #if defined(MHD_USE_POSIX_THREADS)
92 # define MHD_THRD_RTRN_TYPE_ void*
93 # define MHD_THRD_CALL_SPEC_
94 #elif defined(MHD_USE_W32_THREADS)
95 # define MHD_THRD_RTRN_TYPE_ unsigned
96 # define MHD_THRD_CALL_SPEC_ __stdcall
99 #if defined(MHD_USE_POSIX_THREADS)
100 typedef pthread_t MHD_thread_ID_;
101 #elif defined(MHD_USE_W32_THREADS)
102 typedef DWORD MHD_thread_ID_;
115 #if defined(MHD_USE_POSIX_THREADS)
116 # ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
117 union _MHD_thread_handle_ID_
119 MHD_thread_handle_ handle;
122 typedef union _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
124 struct _MHD_thread_handle_ID_
126 MHD_thread_handle_ handle;
129 typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
131 #elif defined(MHD_USE_W32_THREADS)
132 struct _MHD_thread_handle_ID_
134 MHD_thread_handle_ handle;
137 typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
140 #if defined(MHD_USE_POSIX_THREADS)
146 #define MHD_join_thread_(thread) (! pthread_join ((thread), NULL))
147 #elif defined(MHD_USE_W32_THREADS)
153 #define MHD_join_thread_(thread) \
154 ( (WAIT_OBJECT_0 == WaitForSingleObject ( (thread), INFINITE)) ? \
155 (CloseHandle ( (thread)), ! 0) : 0 )
158 #if defined(MHD_USE_POSIX_THREADS)
164 #define MHD_thread_ID_match_current_(pid) \
165 (pthread_equal ((pid).ID, pthread_self ()))
166 #elif defined(MHD_USE_W32_THREADS)
172 #define MHD_thread_ID_match_current_(pid) (GetCurrentThreadId () == (pid).ID)
175 #if defined(MHD_USE_POSIX_THREADS)
176 # ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
181 #define MHD_thread_init_(thread_handle_ID_ptr) (void) 0
187 #define MHD_thread_init_(thread_handle_ID_ptr) ((thread_handle_ID_ptr)->ID = \
190 #elif defined(MHD_USE_W32_THREADS)
195 #define MHD_thread_init_(thread_handle_ID_ptr) ((thread_handle_ID_ptr)->ID = \
196 GetCurrentThreadId ())
205 typedef MHD_THRD_RTRN_TYPE_
226 #ifndef MHD_USE_THREAD_NAME_
227 #define MHD_create_named_thread_(t,n,s,r,a) MHD_create_thread_ ((t),(s),(r),(a))
241 const char *thread_name,
int MHD_create_thread_(MHD_thread_handle_ID_ *thread, size_t stack_size, MHD_THREAD_START_ROUTINE_ start_routine, void *arg)
MHD_THRD_RTRN_TYPE_(MHD_THRD_CALL_SPEC_ * MHD_THREAD_START_ROUTINE_)(void *cls)
additional automatic macros for MHD_config.h
#define MHD_create_named_thread_(t, n, s, r, a)