Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/samples/winrt/ImageManipulations/MediaExtensions/Common/CritSec.h
16345 views
1
#pragma once
2
3
//////////////////////////////////////////////////////////////////////////
4
// CritSec
5
// Description: Wraps a critical section.
6
//////////////////////////////////////////////////////////////////////////
7
8
class CritSec
9
{
10
public:
11
CRITICAL_SECTION m_criticalSection;
12
public:
13
CritSec()
14
{
15
InitializeCriticalSectionEx(&m_criticalSection, 100, 0);
16
}
17
18
~CritSec()
19
{
20
DeleteCriticalSection(&m_criticalSection);
21
}
22
23
_Acquires_lock_(m_criticalSection)
24
void Lock()
25
{
26
EnterCriticalSection(&m_criticalSection);
27
}
28
29
_Releases_lock_(m_criticalSection)
30
void Unlock()
31
{
32
LeaveCriticalSection(&m_criticalSection);
33
}
34
};
35
36
37
//////////////////////////////////////////////////////////////////////////
38
// AutoLock
39
// Description: Provides automatic locking and unlocking of a
40
// of a critical section.
41
//
42
// Note: The AutoLock object must go out of scope before the CritSec.
43
//////////////////////////////////////////////////////////////////////////
44
45
class AutoLock
46
{
47
private:
48
CritSec *m_pCriticalSection;
49
public:
50
_Acquires_lock_(m_pCriticalSection)
51
AutoLock(CritSec& crit)
52
{
53
m_pCriticalSection = &crit;
54
m_pCriticalSection->Lock();
55
}
56
57
_Releases_lock_(m_pCriticalSection)
58
~AutoLock()
59
{
60
m_pCriticalSection->Unlock();
61
}
62
};
63
64