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) || defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) || \
62 defined(HAVE_PTHREAD_SETNAME_NP_DARWIN) || defined(HAVE_PTHREAD_SETNAME_NP_NETBSD) || \
63 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI)
64 # define MHD_USE_THREAD_NAME_
66 # elif defined(MHD_USE_W32_THREADS)
69 # define MHD_USE_THREAD_NAME_
74 #if defined(MHD_USE_POSIX_THREADS)
75 typedef pthread_t MHD_thread_handle_;
76 #elif defined(MHD_USE_W32_THREADS)
77 typedef HANDLE MHD_thread_handle_;
80 #if defined(MHD_USE_POSIX_THREADS)
81 # define MHD_THRD_RTRN_TYPE_ void*
82 # define MHD_THRD_CALL_SPEC_
83 #elif defined(MHD_USE_W32_THREADS)
84 # define MHD_THRD_RTRN_TYPE_ unsigned
85 # define MHD_THRD_CALL_SPEC_ __stdcall
88 #if defined(MHD_USE_POSIX_THREADS)
89 typedef pthread_t MHD_thread_ID_;
90 #elif defined(MHD_USE_W32_THREADS)
91 typedef DWORD MHD_thread_ID_;
101 #if defined(MHD_USE_POSIX_THREADS)
102 # ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
103 union _MHD_thread_handle_ID_
105 MHD_thread_handle_ handle;
108 typedef union _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
110 struct _MHD_thread_handle_ID_
112 MHD_thread_handle_ handle;
115 typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
117 #elif defined(MHD_USE_W32_THREADS)
118 struct _MHD_thread_handle_ID_
120 MHD_thread_handle_ handle;
123 typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
126 #if defined(MHD_USE_POSIX_THREADS)
132 #define MHD_join_thread_(thread) (!pthread_join((thread), NULL))
133 #elif defined(MHD_USE_W32_THREADS)
139 #define MHD_join_thread_(thread) (WAIT_OBJECT_0 == WaitForSingleObject((thread), INFINITE) ? (CloseHandle((thread)), !0) : 0)
142 #if defined(MHD_USE_POSIX_THREADS)
148 #define MHD_thread_ID_match_current_(ID) (pthread_equal((ID), pthread_self()))
149 #elif defined(MHD_USE_W32_THREADS)
155 #define MHD_thread_ID_match_current_(ID) (GetCurrentThreadId() == (ID))
158 #if defined(MHD_USE_POSIX_THREADS)
159 # ifdef MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD
164 #define MHD_thread_init_(thread_handle_ID_ptr) (void)0
170 #define MHD_thread_init_(thread_handle_ID_ptr) ((thread_handle_ID_ptr)->ID=pthread_self())
172 #elif defined(MHD_USE_W32_THREADS)
177 #define MHD_thread_init_(thread_handle_ID_ptr) ((thread_handle_ID_ptr)->ID=GetCurrentThreadId())
186 typedef MHD_THRD_RTRN_TYPE_
204 MHD_THREAD_START_ROUTINE_ start_routine,
207 #ifndef MHD_USE_THREAD_NAME_
208 #define MHD_create_named_thread_(t,n,s,r,a) MHD_create_thread_((t),(s),(r),(a))
222 const char* thread_name,
224 MHD_THREAD_START_ROUTINE_ start_routine,
additional automatic macros for MHD_config.h
int MHD_create_thread_(MHD_thread_handle_ID_ *thread, size_t stack_size, MHD_THREAD_START_ROUTINE_ start_routine, void *arg)
#define MHD_create_named_thread_(t, n, s, r, a)
MHD_THRD_RTRN_TYPE_(MHD_THRD_CALL_SPEC_ * MHD_THREAD_START_ROUTINE_)(void *cls)