Check-in [5bd5ef312f]
Overview
Comment:Subversion to Fossil Copy Commit. Please Ignore. Recording copying build/cackey_win32_build/include/pthread.h to build/cackey_win64_build/include/pthread.h.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:5bd5ef312f186366951091595ee5b597d5961fdd
User & Date: rkeene on 2012-07-19 05:39:05
Other Links: manifest | tags
Context
2012-07-19
05:39
Updated to build using mingw32-w64 built-in winscard check-in: a2b7df3c9a user: rkeene tags: trunk
05:39
Subversion to Fossil Copy Commit. Please Ignore. Recording copying build/cackey_win32_build/include/pthread.h to build/cackey_win64_build/include/pthread.h. check-in: 5bd5ef312f user: rkeene tags: trunk
05:29
Corrected PC/SC test check-in: b0c5c2ea32 user: rkeene tags: trunk
Changes

Added build/cackey_win64_build/include/pthread.h version [bedfe2684e].

            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)) == 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