3422148 [rkeene@sledge /home/rkeene/projects/webdraw]$ cat -n win32-pthread-emul.h
 1 /* Thread_emulation.h */
 2 /* Author: Johnson M. Hart */
 3 /* Emulate the Pthreads model for the Win32 platform */
 4 /* The emulation is not complete, but it does provide a subset */
 5 /* required for a first project */
 6 /* Source: http://world.std.com/~jmhart/opensource.htm */
 7 /* The emulation is not complete, but it does provide a subset */
 8 /* that will work with many well-behaved programs */
 9 /* IF YOU ARE REALLY SERIOUS ABOUT THIS, USE THE OPEN SOURCE */
10 /* PTHREAD LIBRARY. YOU'LL FIND IT ON THE RED HAT SITE */
11 
12 #ifndef _THREAD_EMULATION
13 #  define _THREAD_EMULATION
14 
15 /* Thread management macros */
16 #  ifdef _WIN32
17 #    define _WIN32_WINNT 0x500 /* WINBASE.H - Enable SignalObjectAndWait */
18 #    include <process.h>
19 #    include <windows.h>
20 #    define THREAD_FUNCTION_PROTO THREAD_FUNCTION_RETURN (__stdcall *) (void *)
21 #    define THREAD_FUNCTION_RETURN unsigned int
22 #    define THREAD_SPECIFIC_INDEX DWORD
23 #    define pthread_t HANDLE
24 #    define pthread_attr_t DWORD
25 #    define pthread_create(thhandle, attr, thfunc, tharg) ((int) ((*thhandle = (HANDLE) _beginthreadex(NULL, 0,
	(THREAD_FUNCTION_PROTO) thfunc, tharg, 0, NULL)) == NULL))
26 #    define pthread_join(thread, result) ((WaitForSingleObject((thread), INFINITE) != WAIT_OBJECT_0) ||
	!CloseHandle(thread))
27 #    define pthread_detach(thread) { if (((void *) thread) != NULL) { CloseHandle((void *) thread); }}
28 #    define thread_sleep(nms) Sleep(nms)
29 #    define pthread_cancel(thread) TerminateThread(thread, 0)
30 #    define ts_key_create(ts_key, destructor) {ts_key = TlsAlloc();}
31 #    define pthread_getspecific(ts_key) TlsGetValue(ts_key)
32 #    define pthread_setspecific(ts_key, value) TlsSetValue(ts_key, (void *)value)
33 #    define pthread_self() GetCurrentThreadId()
34 #  else
35 #    include <pthread.h>
36 #    define THREAD_FUNCTION_RETURN void *
37 #  endif
38 
39 /* Syncrhronization macros: Win32->pthread */
40 #  ifdef _WIN32
41 #    define pthread_mutex_t HANDLE
42 #    define pthread_cond_t HANDLE
43 #    define pthread_mutex_lock(pobject) WaitForSingleObject(*pobject, INFINITE)
44 #    define pthread_mutex_unlock(pobject) ReleaseMutex(*pobject)
45 #    define pthread_mutex_init(pobject,pattr) (*pobject=CreateMutex(NULL, FALSE, NULL))
46 #    define pthread_cond_init(pobject,pattr) (*pobject=CreateEvent(NULL, FALSE, FALSE, NULL))
47 #    define pthread_mutex_destroy(pobject) CloseHandle(*pobject)
48 #    define pthread_cond_destroy(pobject) CloseHandle(*pobject)
49 #    define pthread_cond_wait(pcv,pmutex) { SignalObjectAndWait(*pmutex, *pcv, INFINITE, FALSE);
	WaitForSingleObject(*pmutex, INFINITE); }
50 #    define pthread_cond_signal(pcv) SetEvent(*pcv)
51 #  endif
52 
53 #endif
3422149 [rkeene@sledge /home/rkeene/projects/webdraw]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2009-06-23 03:25:49