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)
84 typedef pthread_t MHD_thread_handle_;
85 #elif defined(MHD_USE_W32_THREADS)
86 typedef 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)
98 typedef pthread_t MHD_thread_ID_;
99 #elif defined(MHD_USE_W32_THREADS)
100 typedef DWORD MHD_thread_ID_;
113 #if defined(MHD_USE_POSIX_THREADS)
114 # ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
115 union _MHD_thread_handle_ID_
117 MHD_thread_handle_ handle;
120 typedef union _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
122 struct _MHD_thread_handle_ID_
124 MHD_thread_handle_ handle;
127 typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
129 #elif defined(MHD_USE_W32_THREADS)
130 struct _MHD_thread_handle_ID_
132 MHD_thread_handle_ handle;
135 typedef 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 ())
204 typedef 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)
additional automatic macros for MHD_config.h
#define MHD_create_named_thread_(t, n, s, r, a)