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. 71 #if defined(MHD_USE_POSIX_THREADS) && defined(MHD_USE_W32_THREADS) 72 # error Both MHD_USE_POSIX_THREADS and MHD_USE_W32_THREADS are defined 75 #ifndef MHD_NO_THREAD_NAMES 76 # if defined(MHD_USE_POSIX_THREADS) 77 # if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \ 78 defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) || \ 79 defined(HAVE_PTHREAD_SETNAME_NP_DARWIN) || \ 80 defined(HAVE_PTHREAD_SETNAME_NP_NETBSD) || \ 81 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \ 82 defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI) 83 # define MHD_USE_THREAD_NAME_ 85 # elif defined(MHD_USE_W32_THREADS) 88 # define MHD_USE_THREAD_NAME_ 95 #if defined(MHD_USE_POSIX_THREADS) 101 # define MHD_join_thread_(native_handle) \ 102 (! pthread_join ((native_handle), NULL)) 103 #elif defined(MHD_USE_W32_THREADS) 109 # define MHD_join_thread_(native_handle) \ 110 ( (WAIT_OBJECT_0 == WaitForSingleObject ( (native_handle), INFINITE)) ? \ 111 (CloseHandle ( (native_handle)), ! 0) : 0 ) 114 #if defined(MHD_USE_POSIX_THREADS) 118 typedef pthread_t MHD_thread_handle_native_;
119 #elif defined(MHD_USE_W32_THREADS) 123 typedef HANDLE MHD_thread_handle_native_;
126 #if defined(MHD_USE_POSIX_THREADS) 127 # if defined(__gnu_linux__) || \ 128 (defined(__linux__) && defined(__GLIBC__)) 136 # define MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_ \ 137 ((MHD_thread_handle_native_) 0) 140 #elif defined(MHD_USE_W32_THREADS) 144 # define MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_ \ 145 ((MHD_thread_handle_native_) NULL) 148 #if ! defined(MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_) 165 # define MHD_thread_handle_set_invalid_(handle_ptr) \ 166 ((handle_ptr)->valid = false) 171 # define MHD_thread_handle_set_native_(handle_ptr,native_val) \ 172 ((handle_ptr)->valid = true, (handle_ptr)->native = native_val) 176 # define MHD_thread_handle_is_valid_(handle_var) \ 181 # define MHD_thread_handle_get_native_(handle_var) \ 182 ((handle_var).native) 192 # define MHD_thread_handle_set_invalid_(handle_ptr) \ 193 ((*(handle_ptr)) = MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_) 198 # define MHD_thread_handle_set_native_(handle_ptr,native_val) \ 199 ((*(handle_ptr)) = native_val) 203 # define MHD_thread_handle_is_valid_(handle_var) \ 204 (MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_ != handle_var) 208 # define MHD_thread_handle_get_native_(handle_var) \ 215 # define MHD_thread_handle_get_native_ptr_(handle_ptr) \ 222 #if defined(MHD_USE_POSIX_THREADS) 226 typedef pthread_t MHD_thread_ID_native_;
231 # define MHD_thread_ID_native_current_ pthread_self 237 # define MHD_thread_ID_native_equal_(id1,id2) \ 238 (pthread_equal(id1,id2)) 239 #elif defined(MHD_USE_W32_THREADS) 243 typedef DWORD MHD_thread_ID_native_;
248 # define MHD_thread_ID_native_current_ GetCurrentThreadId 254 # define MHD_thread_ID_native_equal_(id1,id2) \ 263 #define MHD_thread_ID_native_is_current_thread_(id) \ 264 MHD_thread_ID_native_equal_(id, MHD_thread_ID_native_current_()) 267 #if defined(MHD_USE_POSIX_THREADS) 268 # if defined(MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_) 272 # define MHD_THREAD_ID_NATIVE_VALUE_INVALID_ \ 273 MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_ 275 #elif defined(MHD_USE_W32_THREADS) 279 # define MHD_THREAD_ID_NATIVE_VALUE_INVALID_ \ 280 ((MHD_thread_ID_native_) 0) 283 #if ! defined(MHD_THREAD_ID_NATIVE_VALUE_INVALID_) 300 # define MHD_thread_ID_set_invalid_(ID_ptr) \ 301 ((ID_ptr)->valid = false) 306 # define MHD_thread_ID_set_native_(ID_ptr,native_val) \ 307 ((ID_ptr)->valid = true, (ID_ptr)->native = native_val) 311 # define MHD_thread_ID_is_valid_(ID_var) \ 316 # define MHD_thread_ID_get_native_(ID_var) \ 321 # define MHD_thread_ID_is_current_thread_(ID_var) \ 322 (MHD_thread_ID_is_valid_(ID_var) && \ 323 MHD_thread_ID_native_is_current_thread_((ID_var).native)) 333 # define MHD_thread_ID_set_invalid_(ID_ptr) \ 334 ((*(ID_ptr)) = MHD_THREAD_ID_NATIVE_VALUE_INVALID_) 339 # define MHD_thread_ID_set_native_(ID_ptr,native_val) \ 340 ((*(ID_ptr)) = native_val) 344 # define MHD_thread_ID_is_valid_(ID_var) \ 345 (MHD_THREAD_ID_NATIVE_VALUE_INVALID_ != ID_var) 349 # define MHD_thread_ID_get_native_(ID_var) \ 354 # define MHD_thread_ID_is_current_thread_(ID_var) \ 355 MHD_thread_ID_native_is_current_thread_(ID_var) 361 # define MHD_thread_ID_set_current_thread_(ID_ptr) \ 362 MHD_thread_ID_set_native_(ID_ptr,MHD_thread_ID_native_current_()) 365 #if defined(MHD_USE_POSIX_THREADS) 366 # if defined(MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_) && \ 367 ! defined(MHD_THREAD_ID_NATIVE_VALUE_INVALID_) 369 MHD_THREAD_ID_NATIVE_VALUE_INVALID_ is defined, but MHD_THREAD_ID_NATIVE_VALUE_INVALID_ is not defined 370 # elif ! defined(MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_) && \ 371 defined(MHD_THREAD_ID_NATIVE_VALUE_INVALID_) 373 MHD_THREAD_ID_NATIVE_VALUE_INVALID_ is not defined, but MHD_THREAD_ID_NATIVE_VALUE_INVALID_ is defined 404 #if defined(MHD_USE_POSIX_THREADS) && \ 405 defined(MHD_PTHREAD_CREATE__SET_ID_BEFORE_START_THREAD) && \ 406 defined(MHD_THREAD_HANDLE_NATIVE_VALUE_INVALID_) && \ 407 defined(MHD_THREAD_ID_NATIVE_VALUE_INVALID_) && \ 408 defined(MHD_thread_handle_get_native_ptr_) 415 # define MHD_THREAD_HANDLE_ID_IS_UNION 1 436 #define MHD_thread_handle_ID_set_invalid_(hndl_id_ptr) \ 437 (MHD_thread_handle_set_invalid_(&((hndl_id_ptr)->handle)), \ 438 MHD_thread_ID_set_invalid_(&((hndl_id_ptr)->ID))) 444 #define MHD_thread_handle_ID_is_valid_handle_(hndl_id) \ 445 MHD_thread_handle_is_valid_((hndl_id).handle) 451 #define MHD_thread_handle_ID_set_native_handle_(hndl_id_ptr,native_val) \ 452 MHD_thread_handle_set_native_(&((hndl_id_ptr)->handle),native_val) 454 #if defined(MHD_thread_handle_get_native_ptr_) 460 # define MHD_thread_handle_ID_get_native_handle_ptr_(hndl_id_ptr) \ 461 MHD_thread_handle_get_native_ptr_(&((hndl_id_ptr)->handle)) 467 #define MHD_thread_handle_ID_get_native_handle_(hndl_id) \ 468 MHD_thread_handle_get_native_((hndl_id).handle) 474 #define MHD_thread_handle_ID_is_valid_ID_(hndl_id) \ 475 MHD_thread_ID_is_valid_((hndl_id).ID) 477 #if defined(MHD_THREAD_HANDLE_ID_IS_UNION) 478 # if defined(MHD_USE_W32_THREADS) 479 # error MHD_thread_handle_ID_ cannot be a union with W32 threads 484 # define MHD_thread_handle_ID_set_current_thread_ID_(hndl_id_ptr) (void) 0 489 # define MHD_thread_handle_ID_set_current_thread_ID_(hndl_id_ptr) \ 490 MHD_thread_ID_set_current_thread_(&((hndl_id_ptr)->ID)) 498 #define MHD_thread_handle_ID_is_current_thread_(hndl_id) \ 499 MHD_thread_ID_is_current_thread_((hndl_id).ID) 506 #define MHD_thread_handle_ID_join_thread_(hndl_id) \ 507 MHD_join_thread_(MHD_thread_handle_ID_get_native_handle_(hndl_id)) 509 #if defined(MHD_USE_POSIX_THREADS) 510 # define MHD_THRD_RTRN_TYPE_ void* 511 # define MHD_THRD_CALL_SPEC_ 512 #elif defined(MHD_USE_W32_THREADS) 513 # define MHD_THRD_RTRN_TYPE_ unsigned 514 # define MHD_THRD_CALL_SPEC_ __stdcall 523 typedef MHD_THRD_RTRN_TYPE_
544 #ifndef MHD_USE_THREAD_NAME_ 545 #define MHD_create_named_thread_(t,n,s,r,a) MHD_create_thread_ ((t),(s),(r),(a)) 559 const char *thread_name,
MHD_thread_handle_native_ native
additional automatic macros for MHD_config.h
MHD_thread_handle_ handle
struct MHD_thread_ID_struct_ MHD_thread_ID_
struct MHD_thread_handle_struct_ MHD_thread_handle_
MHD_THRD_RTRN_TYPE_(MHD_THRD_CALL_SPEC_ * MHD_THREAD_START_ROUTINE_)(void *cls)
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_thread_ID_native_ native