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