1/* Threads.h -- multithreading library 22009-03-27 : Igor Pavlov : Public domain */ 3 4#ifndef __7Z_THREADS_H 5#define __7Z_THREADS_H 6 7#include "Types.h" 8 9#ifdef __cplusplus 10extern "C" { 11#endif 12 13WRes HandlePtr_Close(HANDLE *h); 14WRes Handle_WaitObject(HANDLE h); 15 16typedef HANDLE CThread; 17#define Thread_Construct(p) *(p) = NULL 18#define Thread_WasCreated(p) (*(p) != NULL) 19#define Thread_Close(p) HandlePtr_Close(p) 20#define Thread_Wait(p) Handle_WaitObject(*(p)) 21typedef unsigned THREAD_FUNC_RET_TYPE; 22#define THREAD_FUNC_CALL_TYPE MY_STD_CALL 23#define THREAD_FUNC_DECL THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE 24typedef THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE * THREAD_FUNC_TYPE)(void *); 25WRes Thread_Create(CThread *p, THREAD_FUNC_TYPE func, LPVOID param); 26 27typedef HANDLE CEvent; 28typedef CEvent CAutoResetEvent; 29typedef CEvent CManualResetEvent; 30#define Event_Construct(p) *(p) = NULL 31#define Event_IsCreated(p) (*(p) != NULL) 32#define Event_Close(p) HandlePtr_Close(p) 33#define Event_Wait(p) Handle_WaitObject(*(p)) 34WRes Event_Set(CEvent *p); 35WRes Event_Reset(CEvent *p); 36WRes ManualResetEvent_Create(CManualResetEvent *p, int signaled); 37WRes ManualResetEvent_CreateNotSignaled(CManualResetEvent *p); 38WRes AutoResetEvent_Create(CAutoResetEvent *p, int signaled); 39WRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *p); 40 41typedef HANDLE CSemaphore; 42#define Semaphore_Construct(p) (*p) = NULL 43#define Semaphore_Close(p) HandlePtr_Close(p) 44#define Semaphore_Wait(p) Handle_WaitObject(*(p)) 45WRes Semaphore_Create(CSemaphore *p, UInt32 initCount, UInt32 maxCount); 46WRes Semaphore_ReleaseN(CSemaphore *p, UInt32 num); 47WRes Semaphore_Release1(CSemaphore *p); 48 49typedef CRITICAL_SECTION CCriticalSection; 50WRes CriticalSection_Init(CCriticalSection *p); 51#define CriticalSection_Delete(p) DeleteCriticalSection(p) 52#define CriticalSection_Enter(p) EnterCriticalSection(p) 53#define CriticalSection_Leave(p) LeaveCriticalSection(p) 54 55#ifdef __cplusplus 56} 57#endif 58 59#endif 60