diff options
author | Guido van Rossum <guido@python.org> | 1997-08-14 20:12:58 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-08-14 20:12:58 (GMT) |
commit | 49b1226781c3f6d3ea0248328e77254d5af54ee2 (patch) | |
tree | faa94dc6ee819d6ad6c8c4a87b44dc4a72a209cc | |
parent | d47a0a86b4ae4afeb17d8e64e1c447e4d4025f10 (diff) | |
download | cpython-49b1226781c3f6d3ea0248328e77254d5af54ee2.zip cpython-49b1226781c3f6d3ea0248328e77254d5af54ee2.tar.gz cpython-49b1226781c3f6d3ea0248328e77254d5af54ee2.tar.bz2 |
Use _beginthread() and _endthread() in favor of CreateThread() and
ExitThread(). As discussed in c.l.p, this takes care of
initialization and finalization of thread-local storage allocated by
the C runtime system. Not sure whether non-MS compilers grok this
though (but who cares :-).
-rw-r--r-- | Python/thread_nt.h | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/Python/thread_nt.h b/Python/thread_nt.h index d65569c..194298d 100644 --- a/Python/thread_nt.h +++ b/Python/thread_nt.h @@ -31,8 +31,9 @@ PERFORMANCE OF THIS SOFTWARE. /* This code implemented by Dag.Gruneau@elsa.preseco.comm.se */ -#include "windows.h" -#include "limits.h" +#include <windows.h> +#include <limits.h> +#include <process.h> long get_thread_ident(void); @@ -53,25 +54,16 @@ static void _init_thread(void) */ int start_new_thread(void (*func)(void *), void *arg) { - HANDLE aThread; - DWORD aThreadId; + long rv; + int success = 0; - int success = 0; /* init not needed when SOLARIS_THREADS and */ - /* C_THREADS implemented properly */ dprintf(("%ld: start_new_thread called\n", get_thread_ident())); if (!initialized) init_thread(); - aThread = CreateThread( - NULL, /* No security attributes */ - 0, /* use default stack size */ - (LPTHREAD_START_ROUTINE) func, /* thread function */ - (LPVOID) arg, /* argument to thread function */ - 0, /* use the default creation flags */ - &aThreadId); /* returns the thread identifier */ + rv = _beginthread(func, 0, arg); /* use default stack size */ - if (aThread != NULL) { - CloseHandle(aThread); /* We do not want to have any zombies hanging around */ + if (rv != -1) { success = 1; dprintf(("%ld: start_new_thread succeeded: %ld\n", get_thread_ident(), aThreadId)); } @@ -99,7 +91,7 @@ static void do_exit_thread(int no_cleanup) _exit(0); else exit(0); - ExitThread(0); + _endthread(); } void exit_thread(void) |