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