28 #ifdef MHD_USE_W32_THREADS 32 #ifdef MHD_USE_THREAD_NAME_ 34 #ifdef HAVE_PTHREAD_NP_H 35 #include <pthread_np.h> 41 #ifndef MHD_USE_THREAD_NAME_ 43 #define MHD_set_thread_name_(t, n) (void) 44 #define MHD_set_cur_thread_name_(n) (void) 48 #if defined(MHD_USE_POSIX_THREADS) 49 #if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI) 50 # define MHD_USE_THREAD_ATTR_SETNAME 1 53 #if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \ 54 || defined(HAVE_PTHREAD_SETNAME_NP_NETBSD) 65 const char *thread_name)
67 if (
NULL == thread_name)
70 #if defined(HAVE_PTHREAD_SETNAME_NP_GNU) 71 return !pthread_setname_np (thread_id, thread_name);
72 #elif defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) 74 pthread_set_name_np (thread_id, thread_name);
76 #elif defined(HAVE_PTHREAD_SETNAME_NP_NETBSD) 82 return !pthread_setname_np (thread_id, thread_name, 0);
93 #define MHD_set_cur_thread_name_(n) MHD_set_thread_name_(pthread_self(),(n)) 96 #define MHD_set_cur_thread_name_(n) MHD_set_thread_name_(0,(n)) 98 #elif defined(HAVE_PTHREAD_SETNAME_NP_DARWIN) 105 #define MHD_set_cur_thread_name_(n) (!(pthread_setname_np((n)))) 108 #elif defined(MHD_USE_W32_THREADS) 109 #ifndef _MSC_FULL_VER 121 const char *thread_name)
123 static const DWORD VC_SETNAME_EXC = 0x406D1388;
125 struct thread_info_struct
134 if (
NULL == thread_name)
137 thread_info.type = 0x1000;
138 thread_info.name = thread_name;
139 thread_info.ID = thread_id;
140 thread_info.flags = 0;
144 RaiseException (VC_SETNAME_EXC,
146 sizeof (thread_info) /
sizeof(ULONG_PTR),
147 (ULONG_PTR *) &thread_info);
149 __except (EXCEPTION_EXECUTE_HANDLER)
161 #define MHD_set_cur_thread_name_(n) MHD_set_thread_name_(-1,(n)) 183 #if defined(MHD_USE_POSIX_THREADS) 189 res = pthread_attr_init (&attr);
192 res = pthread_attr_setstacksize (&attr,
195 res = pthread_create (&(thread->handle),
199 pthread_attr_destroy (&attr);
203 res = pthread_create (&(thread->handle),
212 #elif defined(MHD_USE_W32_THREADS) 213 #if SIZE_MAX != UINT_MAX 221 thread->handle = (MHD_thread_handle_)
222 _beginthreadex (
NULL,
223 (
unsigned int) stack_size,
229 if ((MHD_thread_handle_)-1 == thread->handle)
236 #ifdef MHD_USE_THREAD_NAME_ 238 #ifndef MHD_USE_THREAD_ATTR_SETNAME 239 struct MHD_named_helper_param_
258 static MHD_THRD_RTRN_TYPE_ MHD_THRD_CALL_SPEC_
259 named_thread_starter (
void *
data)
261 struct MHD_named_helper_param_ *
const param =
262 (
struct MHD_named_helper_param_ *)
data;
267 return (MHD_THRD_RTRN_TYPE_)0;
272 thr_func = param->start_routine;
275 return thr_func(arg);
292 const char* thread_name,
297 #if defined(MHD_USE_THREAD_ATTR_SETNAME) 301 res = pthread_attr_init (&attr);
304 #if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) 310 res = pthread_attr_setname_np (&attr, thread_name, 0);
311 #elif defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI) 312 res = pthread_attr_setname_np (&attr, thread_name);
314 #error No pthread_attr_setname_np() function. 316 if (res == 0 && 0 != stack_size)
317 res = pthread_attr_setstacksize (&attr,
320 res = pthread_create (&(thread->handle),
324 pthread_attr_destroy (&attr);
331 struct MHD_named_helper_param_ *param;
333 if (
NULL == thread_name)
339 param = malloc (
sizeof (
struct MHD_named_helper_param_));
343 param->start_routine = start_routine;
345 param->name = thread_name;
352 &named_thread_starter,
#define MHD_set_thread_name_(t, n)
#define MHD_create_named_thread_(t, n, s, r, a)
#define MHD_set_cur_thread_name_(n)
int MHD_create_thread_(MHD_thread_handle_ID_ *thread, size_t stack_size, MHD_THREAD_START_ROUTINE_ start_routine, void *arg)
limits values definitions
Header for platform-independent threads abstraction.
MHD_THRD_RTRN_TYPE_(MHD_THRD_CALL_SPEC_ * MHD_THREAD_START_ROUTINE_)(void *cls)