37
int pthread_create(pthread_t *new_thread_ID,
38
const pthread_attr_t * attr,
39
pthread_func start_func, void *arg)
38
pthread_create(pthread_t * const new_thread_ID,
39
const pthread_attr_t * const attr,
44
46
hThread = (HANDLE) _beginthreadex (
45
NULL, 0, start_func, (LPVOID)arg, CREATE_SUSPENDED, &dwThreadID);
47
NULL, 0, func, (LPVOID)arg, CREATE_SUSPENDED, &dwThreadID);
47
49
SetThreadPriority (hThread, THREAD_PRIORITY_NORMAL);
48
50
ResumeThread (hThread);
52
54
return hThread ? 0 : -1;
55
59
/* Just kill it. */
56
int pthread_cancel(pthread_t target_thread)
58
CloseHandle (target_thread);
61
pthread_cancel(pthread_t const target_thread) {
63
CloseHandle(target_thread);
62
69
/* Waits for the thread to exit before continuing. */
63
int pthread_join(pthread_t target_thread, void **status)
71
pthread_join(pthread_t const target_thread,
72
void ** const statusP) {
65
74
DWORD dwResult = WaitForSingleObject(target_thread, INFINITE);
66
(*status) = (void *)dwResult;
70
/* Stubbed. Do nothing. */
71
int pthread_detach(pthread_t target_thread)
76
int pthread_mutex_init(pthread_mutex_t *mp,
77
const pthread_mutexattr_t * attr)
75
*statusP = (void *)dwResult;
82
pthread_detach(pthread_t const target_thread) {
89
pthread_mutex_init(pthread_mutex_t * const mp,
90
const pthread_mutexattr_t * const attr) {
79
92
InitializeCriticalSection(mp);
83
int pthread_mutex_lock(pthread_mutex_t *mp)
99
pthread_mutex_lock(pthread_mutex_t * const mp) {
85
101
EnterCriticalSection(mp);
89
int pthread_mutex_unlock(pthread_mutex_t *mp)
108
pthread_mutex_unlock(pthread_mutex_t * const mp) {
91
110
LeaveCriticalSection(mp);
95
int pthread_mutex_destroy(pthread_mutex_t *mp)
117
pthread_mutex_destroy(pthread_mutex_t * const mp) {
97
119
DeleteCriticalSection(mp);