forked from somma/_MyLib
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAKSyncObjs.h
More file actions
87 lines (70 loc) · 2.29 KB
/
AKSyncObjs.h
File metadata and controls
87 lines (70 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*-----------------------------------------------------------------------------
* AKSyncObjs.h
*-----------------------------------------------------------------------------
*
*-----------------------------------------------------------------------------
* All rights reserved by Noh Yong Hwan (fixbrain@gmail.com, unsorted@msn.com)
**---------------------------------------------------------------------------*/
#ifndef _SYNC_OBJS_H_
#define _SYNC_OBJS_H_
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
class CAbsSyncObjs
{
public:
CAbsSyncObjs(){};
virtual ~CAbsSyncObjs(){};
virtual BOOL Initialized(void) = 0;
virtual BOOL Init(void) = 0;
virtual void Terminate(void) = 0;
virtual BOOL Enter(void) = 0;
virtual BOOL Leave(void) = 0;
protected:
};
/** -----------------------------------------------------------------------
CriticalSection Wrapper 클래스
-------------------------------------------------------------------------*/
typedef
class AKCriticalSection: public CAbsSyncObjs
{
public:
virtual BOOL Enter(void);
virtual BOOL Leave(void);
virtual BOOL Initialized(void) { return m_initialized; }
protected:
private:
BOOL m_initialized;
CRITICAL_SECTION m_CriticalSection;
public:
AKCriticalSection(void): CAbsSyncObjs(), m_initialized(FALSE){}
~AKCriticalSection(void)
{
// Terminate() 메소드는 virtual 이므로 호출하지 않고,
// 직접 구현 (걍 Terminate() 메소드를 없애버릴까?)
//
if (TRUE == m_initialized)
{
DeleteCriticalSection(&m_CriticalSection);
m_initialized = FALSE;
}
}
/** -----------------------------------------------------------------------
\brief initialize procedure
-------------------------------------------------------------------------*/
virtual BOOL Init(void);
/** -----------------------------------------------------------------------
\brief terminate procedure
-------------------------------------------------------------------------*/
virtual void Terminate(void);
} *PAKCriticalSection;
class LockHelper
{
public:
LockHelper(IN CAbsSyncObjs& Lock):m_Lock(Lock){}
~LockHelper(){m_Lock.Leave();}
private:
CAbsSyncObjs& m_Lock;
LockHelper(const LockHelper& rhs);
LockHelper& operator= (const LockHelper& rhs);
};
#endif