80 lines
1.5 KiB
C++
80 lines
1.5 KiB
C++
/*
|
|
|
|
Copyright (c) 1998-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
blbgen.h
|
|
|
|
Abstract:
|
|
|
|
|
|
Author:
|
|
|
|
*/
|
|
|
|
#ifndef __BLB_GEN__
|
|
#define __BLB_GEN__
|
|
|
|
#include "blbdbg.h"
|
|
|
|
#include <mspenum.h> // for CSafeComEnum
|
|
|
|
const WCHAR_EOS = '\0';
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// my critical section
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
class CCritSection
|
|
{
|
|
private:
|
|
CRITICAL_SECTION m_CritSec;
|
|
|
|
public:
|
|
CCritSection()
|
|
{
|
|
InitializeCriticalSection(&m_CritSec);
|
|
}
|
|
|
|
~CCritSection()
|
|
{
|
|
DeleteCriticalSection(&m_CritSec);
|
|
}
|
|
|
|
void Lock()
|
|
{
|
|
EnterCriticalSection(&m_CritSec);
|
|
}
|
|
|
|
void Unlock()
|
|
{
|
|
LeaveCriticalSection(&m_CritSec);
|
|
}
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// an auto lock that uses my critical section
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
class CLock
|
|
{
|
|
private:
|
|
CCritSection &m_CriticalSection;
|
|
|
|
public:
|
|
CLock(CCritSection &CriticalSection)
|
|
: m_CriticalSection(CriticalSection)
|
|
{
|
|
m_CriticalSection.Lock();
|
|
}
|
|
|
|
~CLock()
|
|
{
|
|
m_CriticalSection.Unlock();
|
|
}
|
|
};
|
|
|
|
// This is the lock on this dll that simulate an apartment model.
|
|
// per sdp lock is much better but it requires a lot of code changes.
|
|
// Since this is not a time critical component, we can live with it.
|
|
extern CCritSection g_DllLock;
|
|
|
|
#endif // __BLB_GEN__
|