Subversion Repositories spk

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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