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)
86typedef pthread_t MHD_thread_handle_;
87#elif defined(MHD_USE_W32_THREADS)
88typedef 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)
100typedef pthread_t MHD_thread_ID_;
101#elif defined(MHD_USE_W32_THREADS)
102typedef DWORD MHD_thread_ID_;
115#if defined(MHD_USE_POSIX_THREADS)
116# ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
117union _MHD_thread_handle_ID_
119 MHD_thread_handle_ handle;
122typedef union _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
124struct _MHD_thread_handle_ID_
126 MHD_thread_handle_ handle;
129typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
131#elif defined(MHD_USE_W32_THREADS)
132struct _MHD_thread_handle_ID_
134 MHD_thread_handle_ handle;
137typedef 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 ())
205typedef 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)
#define MHD_create_named_thread_(t, n, s, r, a)
additional automatic macros for MHD_config.h