37#define MHD_THREADS_H 1
46#if defined(MHD_USE_POSIX_THREADS)
49# define HAVE_CONFIG_H 1
50# ifndef MHD_USE_THREADS
51# define MHD_USE_THREADS 1
53#elif defined(MHD_USE_W32_THREADS)
54# ifndef WIN32_LEAN_AND_MEAN
55# define WIN32_LEAN_AND_MEAN 1
58# ifndef MHD_USE_THREADS
59# define MHD_USE_THREADS 1
62# error No threading API is available.
65#ifndef MHD_NO_THREAD_NAMES
66# if defined(MHD_USE_POSIX_THREADS)
67# if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \
68 defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) || \
69 defined(HAVE_PTHREAD_SETNAME_NP_DARWIN) || \
70 defined(HAVE_PTHREAD_SETNAME_NP_NETBSD) || \
71 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \
72 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI)
73# define MHD_USE_THREAD_NAME_
75# elif defined(MHD_USE_W32_THREADS)
78# define MHD_USE_THREAD_NAME_
83#if defined(MHD_USE_POSIX_THREADS)
84typedef pthread_t MHD_thread_handle_;
85#elif defined(MHD_USE_W32_THREADS)
86typedef HANDLE MHD_thread_handle_;
89#if defined(MHD_USE_POSIX_THREADS)
90# define MHD_THRD_RTRN_TYPE_ void*
91# define MHD_THRD_CALL_SPEC_
92#elif defined(MHD_USE_W32_THREADS)
93# define MHD_THRD_RTRN_TYPE_ unsigned
94# define MHD_THRD_CALL_SPEC_ __stdcall
97#if defined(MHD_USE_POSIX_THREADS)
98typedef pthread_t MHD_thread_ID_;
99#elif defined(MHD_USE_W32_THREADS)
100typedef DWORD MHD_thread_ID_;
113#if defined(MHD_USE_POSIX_THREADS)
114# ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
115union _MHD_thread_handle_ID_
117 MHD_thread_handle_ handle;
120typedef union _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
122struct _MHD_thread_handle_ID_
124 MHD_thread_handle_ handle;
127typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
129#elif defined(MHD_USE_W32_THREADS)
130struct _MHD_thread_handle_ID_
132 MHD_thread_handle_ handle;
135typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
138#if defined(MHD_USE_POSIX_THREADS)
144#define MHD_join_thread_(thread) (! pthread_join ((thread), NULL))
145#elif defined(MHD_USE_W32_THREADS)
151#define MHD_join_thread_(thread) (WAIT_OBJECT_0 == WaitForSingleObject ( \
152 (thread), INFINITE) ? (CloseHandle ( \
157#if defined(MHD_USE_POSIX_THREADS)
163#define MHD_thread_ID_match_current_(pid) \
164 (pthread_equal ((pid).ID, pthread_self ()))
165#elif defined(MHD_USE_W32_THREADS)
171#define MHD_thread_ID_match_current_(pid) (GetCurrentThreadId () == (pid).ID)
174#if defined(MHD_USE_POSIX_THREADS)
175# ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
180#define MHD_thread_init_(thread_handle_ID_ptr) (void) 0
186#define MHD_thread_init_(thread_handle_ID_ptr) ((thread_handle_ID_ptr)->ID = \
189#elif defined(MHD_USE_W32_THREADS)
194#define MHD_thread_init_(thread_handle_ID_ptr) ((thread_handle_ID_ptr)->ID = \
195 GetCurrentThreadId ())
204typedef MHD_THRD_RTRN_TYPE_
225#ifndef MHD_USE_THREAD_NAME_
226#define MHD_create_named_thread_(t,n,s,r,a) MHD_create_thread_ ((t),(s),(r),(a))
240 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