1
0
forked from 0ad/0ad

improved thread start code

This was SVN commit r581.
This commit is contained in:
janwas 2004-06-21 14:22:07 +00:00
parent d231baccef
commit 55f7411ba9

View File

@ -304,10 +304,29 @@ int pthread_setschedparam(pthread_t thread, int policy, const struct sched_param
}
int pthread_create(pthread_t* /* thread */, const void* /* attr */, void*(*func)(void*), void* arg)
struct ThreadParam
{
/* can't use asm 'cause _beginthread might be a func ptr (with libc) */
return (int)_beginthread((void(*)(void*))func, 0, arg);
void*(*func)(void*);
void* user_arg;
};
static unsigned __stdcall thread_start(void* arg)
{
const ThreadParam* param = (const ThreadParam*)arg;
param->func(param->user_arg);
return 0;
}
int pthread_create(pthread_t* thread, const void* attr, void*(*func)(void*), void* user_arg)
{
UNUSED(attr);
// can't use asm - _beginthreadex might be a func ptr (with DLL CRT)
const ThreadParam param = { func, user_arg };
*thread = (pthread_t)_beginthreadex(0, 0, thread_start, (void*)&param, 0, 0);
return 0;
}