1/* Threads.h */ 2 3#ifndef __7Z_THRESDS_H 4#define __7Z_THRESDS_H 5 6#include <windows.h> 7 8#include "Types.h" 9 10typedef struct _CThread 11{ 12 HANDLE handle; 13} CThread; 14 15#define Thread_Construct(thread) (thread)->handle = NULL 16#define Thread_WasCreated(thread) ((thread)->handle != NULL) 17 18typedef unsigned THREAD_FUNC_RET_TYPE; 19#define THREAD_FUNC_CALL_TYPE StdCall 20#define THREAD_FUNC_DECL THREAD_FUNC_RET_TYPE THREAD_FUNC_CALL_TYPE 21 22HRes Thread_Create(CThread *thread, THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE *startAddress)(void *), LPVOID parameter); 23HRes Thread_Wait(CThread *thread); 24HRes Thread_Close(CThread *thread); 25 26typedef struct _CEvent 27{ 28 HANDLE handle; 29} CEvent; 30 31typedef CEvent CAutoResetEvent; 32typedef CEvent CManualResetEvent; 33 34#define Event_Construct(event) (event)->handle = NULL 35#define Event_IsCreated(event) ((event)->handle != NULL) 36 37HRes ManualResetEvent_Create(CManualResetEvent *event, int initialSignaled); 38HRes ManualResetEvent_CreateNotSignaled(CManualResetEvent *event); 39HRes AutoResetEvent_Create(CAutoResetEvent *event, int initialSignaled); 40HRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *event); 41HRes Event_Set(CEvent *event); 42HRes Event_Reset(CEvent *event); 43HRes Event_Wait(CEvent *event); 44HRes Event_Close(CEvent *event); 45 46 47typedef struct _CSemaphore 48{ 49 HANDLE handle; 50} CSemaphore; 51 52#define Semaphore_Construct(p) (p)->handle = NULL 53 54HRes Semaphore_Create(CSemaphore *p, UInt32 initiallyCount, UInt32 maxCount); 55HRes Semaphore_ReleaseN(CSemaphore *p, UInt32 num); 56HRes Semaphore_Release1(CSemaphore *p); 57HRes Semaphore_Wait(CSemaphore *p); 58HRes Semaphore_Close(CSemaphore *p); 59 60 61typedef CRITICAL_SECTION CCriticalSection; 62 63HRes CriticalSection_Init(CCriticalSection *p); 64#define CriticalSection_Delete(p) DeleteCriticalSection(p) 65#define CriticalSection_Enter(p) EnterCriticalSection(p) 66#define CriticalSection_Leave(p) LeaveCriticalSection(p) 67 68#endif 69 70