From 8f3727444fc67c56dc1e1b26bdcb2f41d19320ec Mon Sep 17 00:00:00 2001 From: rpj Date: Sat, 11 Jul 1998 05:12:55 +0000 Subject: Preliminary implementation. Lot's of FIXME's. --- create.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/create.c b/create.c index 8474085..daae84f 100644 --- a/create.c +++ b/create.c @@ -7,6 +7,10 @@ */ #include "pthread.h" +#include "implement.h" + +/* FIXME: There must be a Win32 routine to get this value. */ +DWORD pthread_threads_count = 0; int pthread_create(pthread_t *thread, const pthread_attr_t *attr, @@ -15,4 +19,49 @@ pthread_create(pthread_t *thread, const pthread_attr_t *attr, /* Call Win32 CreateThread. Map attributes as correctly as possible. */ + HANDLE handle; + + /* FIXME: I don't have doco on attributes so these aren't + included yet. Threads will be started with Win32 defaults: + unsuspended and with default stack size. + */ + DWORD flags = 0; + DWORD stack = 0; + LPSECURITY_ATTRIBUTES security = NULL; + + /* FIXME: This needs to be moved into process space. + Perhaps into a structure that contains all + per thread info that is Win32 thread specific but + not visible from the pthreads API, and + accessible through HANDLE (or pthread_t). + */ + SECURITY_ATTRIBUTES security_attr; + DWORD threadID; + + if (pthread_threads_count >= PTHREAD_THREADS_MAX) + return EAGAIN; + + switch (attr) + { + case NULL: + /* Use POSIX default attributes */ + break; + default: + /* Map attributes */ + break; + } + + /* FIXME: I don't have error return values to work with so + I'm assuming this always succeeds (obviously not). + */ + handle = CreateThread(security, + stack, + start_routine, + arg, + flags, + &threadID); + + *thread = (pthread_t) handle; + pthread_threads_count++; + return 0; } -- cgit v1.2.3