37 #define MHD_THREADS_H 1
46 #if defined(MHD_USE_POSIX_THREADS)
49 # define HAVE_CONFIG_H 1
50 #elif defined(MHD_USE_W32_THREADS)
51 # ifndef WIN32_LEAN_AND_MEAN
52 # define WIN32_LEAN_AND_MEAN 1
56 # error No threading API is available.
59 #ifndef MHD_NO_THREAD_NAMES
60 # if defined(MHD_USE_POSIX_THREADS)
61 # if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \
62 defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) || \
63 defined(HAVE_PTHREAD_SETNAME_NP_DARWIN) || \
64 defined(HAVE_PTHREAD_SETNAME_NP_NETBSD) || \
65 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \
66 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI)
67 # define MHD_USE_THREAD_NAME_
69 # elif defined(MHD_USE_W32_THREADS)
72 # define MHD_USE_THREAD_NAME_
77 #if defined(MHD_USE_POSIX_THREADS)
78 typedef pthread_t MHD_thread_handle_;
79 #elif defined(MHD_USE_W32_THREADS)
80 typedef HANDLE MHD_thread_handle_;
83 #if defined(MHD_USE_POSIX_THREADS)
84 # define MHD_THRD_RTRN_TYPE_ void*
85 # define MHD_THRD_CALL_SPEC_
86 #elif defined(MHD_USE_W32_THREADS)
87 # define MHD_THRD_RTRN_TYPE_ unsigned
88 # define MHD_THRD_CALL_SPEC_ __stdcall
91 #if defined(MHD_USE_POSIX_THREADS)
92 typedef pthread_t MHD_thread_ID_;
93 #elif defined(MHD_USE_W32_THREADS)
94 typedef DWORD MHD_thread_ID_;
104 #if defined(MHD_USE_POSIX_THREADS)
105 # ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
106 union _MHD_thread_handle_ID_
108 MHD_thread_handle_ handle;
111 typedef union _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
113 struct _MHD_thread_handle_ID_
115 MHD_thread_handle_ handle;
118 typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
120 #elif defined(MHD_USE_W32_THREADS)
121 struct _MHD_thread_handle_ID_
123 MHD_thread_handle_ handle;
126 typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
129 #if defined(MHD_USE_POSIX_THREADS)
135 #define MHD_join_thread_(thread) (! pthread_join ((thread), NULL))
136 #elif defined(MHD_USE_W32_THREADS)
142 #define MHD_join_thread_(thread) (WAIT_OBJECT_0 == WaitForSingleObject ( \
143 (thread), INFINITE) ? (CloseHandle ( \
148 #if defined(MHD_USE_POSIX_THREADS)
154 #define MHD_thread_ID_match_current_(ID) (pthread_equal ((ID), pthread_self ()))
155 #elif defined(MHD_USE_W32_THREADS)
161 #define MHD_thread_ID_match_current_(ID) (GetCurrentThreadId () == (ID))
164 #if defined(MHD_USE_POSIX_THREADS)
165 # ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
170 #define MHD_thread_init_(thread_handle_ID_ptr) (void) 0
176 #define MHD_thread_init_(thread_handle_ID_ptr) ((thread_handle_ID_ptr)->ID = \
179 #elif defined(MHD_USE_W32_THREADS)
184 #define MHD_thread_init_(thread_handle_ID_ptr) ((thread_handle_ID_ptr)->ID = \
185 GetCurrentThreadId ())
194 typedef MHD_THRD_RTRN_TYPE_
215 #ifndef MHD_USE_THREAD_NAME_
216 #define MHD_create_named_thread_(t,n,s,r,a) MHD_create_thread_ ((t),(s),(r),(a))
230 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