1
2
3
4 #pragma once
5
6
7
8 class CLock
9 {
10
11 public:
12 class CSafeLock
13 {
14
15 public:
16 inline CSafeLock( CLock & lock ) : m_lock( lock )
17 { m_lock.Lock(); }
18
19 inline ~CSafeLock()
20 { m_lock.Unlock(); }
21
22
23 public:
24 CLock & m_lock;
25 };
26
27
28 public:
29 inline CLock()
30 { InitializeCriticalSectionAndSpinCount( &m_cs, 4000 ); }
31
32 inline ~CLock()
33 { DeleteCriticalSection( &m_cs ); }
34
35
36 public:
37 inline void Lock()
38 { EnterCriticalSection( &m_cs ); }
39
40 inline void Unlock()
41 { LeaveCriticalSection( &m_cs ); }
42
43
44 protected:
45 CRITICAL_SECTION m_cs;
46 };