Path: blob/master/samples/winrt/ImageManipulations/MediaExtensions/Common/CritSec.h
16345 views
#pragma once12//////////////////////////////////////////////////////////////////////////3// CritSec4// Description: Wraps a critical section.5//////////////////////////////////////////////////////////////////////////67class CritSec8{9public:10CRITICAL_SECTION m_criticalSection;11public:12CritSec()13{14InitializeCriticalSectionEx(&m_criticalSection, 100, 0);15}1617~CritSec()18{19DeleteCriticalSection(&m_criticalSection);20}2122_Acquires_lock_(m_criticalSection)23void Lock()24{25EnterCriticalSection(&m_criticalSection);26}2728_Releases_lock_(m_criticalSection)29void Unlock()30{31LeaveCriticalSection(&m_criticalSection);32}33};343536//////////////////////////////////////////////////////////////////////////37// AutoLock38// Description: Provides automatic locking and unlocking of a39// of a critical section.40//41// Note: The AutoLock object must go out of scope before the CritSec.42//////////////////////////////////////////////////////////////////////////4344class AutoLock45{46private:47CritSec *m_pCriticalSection;48public:49_Acquires_lock_(m_pCriticalSection)50AutoLock(CritSec& crit)51{52m_pCriticalSection = &crit;53m_pCriticalSection->Lock();54}5556_Releases_lock_(m_pCriticalSection)57~AutoLock()58{59m_pCriticalSection->Unlock();60}61};626364