// Common, group WinWrap
// see CW Critical Sections
// Copyright Alexander Liss
#ifndef __CRITICAL_H__
#define __CRITICAL_H__
#include "win0.h"
class CriticalSection
{
public:
// creates a CRITICAL_SECTION
CriticalSection();
~CriticalSection();
void enter();
void leave();
#if(_WIN32_WINNT >= 0x0400)
BOOL try_enter();
#endif
// A POINTER TO THE INTERNAL CRITICAL_SECTION
CRITICAL_SECTION *get();
private:
CRITICAL_SECTION critical_section;
};
class FunctionLock
{
FunctionLock(const FunctionLock&);
FunctionLock& operator=(const FunctionLock&);
public:
FunctionLock(CriticalSection& c):critical_section(c)
{critical_section.enter();}
~FunctionLock(){critical_section.leave();}
private:
CriticalSection & critical_section;
};
#endif