critsec.h
Upload User: geng8029
Upload Date: 2021-01-30
Package Size: 187k
Code Size: 2k
Category:

Audio program

Development Platform:

Visual C++

  1. #pragma once
  2. namespace MediaFoundationSamples
  3. {
  4.     //////////////////////////////////////////////////////////////////////////
  5.     //  CritSec
  6.     //  Description: Wraps a critical section.
  7.     //////////////////////////////////////////////////////////////////////////
  8.     class CritSec
  9.     {
  10.     private:
  11.         CRITICAL_SECTION m_criticalSection;
  12.     public:
  13.         CritSec()
  14.         {
  15.             InitializeCriticalSection(&m_criticalSection);
  16.         }
  17.         ~CritSec()
  18.         {
  19.             DeleteCriticalSection(&m_criticalSection);
  20.         }
  21.         void Lock()
  22.         {
  23.             EnterCriticalSection(&m_criticalSection);
  24.         }
  25.         void Unlock()
  26.         {
  27.             LeaveCriticalSection(&m_criticalSection);
  28.         }
  29.     };
  30.     //////////////////////////////////////////////////////////////////////////
  31.     //  AutoLock
  32.     //  Description: Provides automatic locking and unlocking of a 
  33.     //               of a critical section.
  34.     //
  35.     //  Note: The AutoLock object must go out of scope before the CritSec.
  36.     //////////////////////////////////////////////////////////////////////////
  37.     class AutoLock
  38.     {
  39.     private:
  40.         CritSec *m_pCriticalSection;
  41.     public:
  42.         AutoLock(CritSec& crit)
  43.         {
  44.             m_pCriticalSection = &crit;
  45.             m_pCriticalSection->Lock();
  46.         }
  47.         ~AutoLock()
  48.         {
  49.             m_pCriticalSection->Unlock();
  50.         }
  51.     };
  52. }; // namespace MediaFoundationSamples