00001 /* 00002 * MUSCLE SmartCard Development ( http://www.linuxnet.com ) 00003 * 00004 * Copyright (C) 2000-2004 00005 * David Corcoran <corcoran@linuxnet.com> 00006 * Damien Sauveron <damien.sauveron@labri.fr> 00007 * Ludovic Rousseau <ludovic.rousseau@free.fr> 00008 * 00009 * $Id: thread_generic.h 1827 2006-01-24 14:49:52Z rousseau $ 00010 */ 00011 00017 #ifndef __thread_generic_h__ 00018 #define __thread_generic_h__ 00019 00020 #ifdef WIN32 00021 #include <windows.h> 00022 #include "PCSC.h" 00023 #else 00024 #include <pthread.h> 00025 #endif 00026 00027 #ifdef __cplusplus 00028 extern "C" 00029 { 00030 #endif 00031 00032 #ifdef WIN32 00033 #define PCSCLITE_THREAD_T HANDLE 00034 #define PCSCLITE_MUTEX CRITICAL_SECTION 00035 #define PCSCLITE_MUTEX_T CRITICAL_SECTION* 00036 #define PCSCLITE_THREAD_FUNCTION(f) void *(*f)(void *) 00037 #else 00038 #define PCSCLITE_THREAD_T pthread_t 00039 #define PCSCLITE_MUTEX pthread_mutex_t 00040 #define PCSCLITE_MUTEX_T pthread_mutex_t* 00041 #define PCSCLITE_THREAD_FUNCTION(f) void *(*f)(void *) 00042 #endif 00043 00044 /* thread attributes */ 00045 #define THREAD_ATTR_DEFAULT 0 00046 #define THREAD_ATTR_DETACHED 1 00047 00048 int SYS_MutexInit(PCSCLITE_MUTEX_T); 00049 int SYS_MutexDestroy(PCSCLITE_MUTEX_T); 00050 int SYS_MutexLock(PCSCLITE_MUTEX_T); 00051 int SYS_MutexUnLock(PCSCLITE_MUTEX_T); 00052 int SYS_ThreadCreate(PCSCLITE_THREAD_T *, int, PCSCLITE_THREAD_FUNCTION( ), LPVOID); 00053 int SYS_ThreadCancel(PCSCLITE_THREAD_T *); 00054 int SYS_ThreadDetach(PCSCLITE_THREAD_T); 00055 int SYS_ThreadJoin(PCSCLITE_THREAD_T *, LPVOID*); 00056 int SYS_ThreadExit(LPVOID); 00057 PCSCLITE_THREAD_T SYS_ThreadSelf(void); 00058 int SYS_ThreadEqual(PCSCLITE_THREAD_T *, PCSCLITE_THREAD_T *); 00059 00060 #ifdef __cplusplus 00061 } 00062 #endif 00063 00064 #endif /* __thread_generic_h__ */