Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

136 lines
3.6 KiB

// This is a part of the Active Template Library.
// Copyright (C) 1996-2001 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Active Template Library Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Active Template Library product.
#ifndef __ATLSYNC_H__
#define __ATLSYNC_H__
#pragma once
#ifndef _ATL_NO_PRAGMA_WARNINGS
#pragma warning(push)
#pragma warning(disable: 4512) // assignment operator could not be generated
#endif // !_ATL_NO_PRAGMA_WARNINGS
#include <atlbase.h>
namespace ATL
{
class CCriticalSection :
public CRITICAL_SECTION
{
public:
CCriticalSection();
#if (_WIN32_WINNT >= 0x0403)
explicit CCriticalSection( ULONG nSpinCount );
#endif
~CCriticalSection() throw();
// Acquire the critical section
void Enter();
// Release the critical section
void Leave() throw();
#if (_WIN32_WINNT >= 0x0403)
// Set the spin count for the critical section
ULONG SetSpinCount( ULONG nSpinCount ) throw();
#endif
#if (_WIN32_WINNT >= 0x0400)
// Attempt to acquire the critical section
BOOL TryEnter() throw();
#endif
};
class CEvent :
public CHandle
{
public:
CEvent() throw();
CEvent( CEvent& h ) throw();
CEvent( BOOL bManualReset, BOOL bInitialState );
CEvent( LPSECURITY_ATTRIBUTES pSecurity, BOOL bManualReset, BOOL bInitialState, LPCTSTR pszName );
explicit CEvent( HANDLE h ) throw();
// Create a new event
BOOL Create( LPSECURITY_ATTRIBUTES pSecurity, BOOL bManualReset, BOOL bInitialState, LPCTSTR pszName ) throw();
// Open an existing named event
BOOL Open( DWORD dwAccess, BOOL bInheritHandle, LPCTSTR pszName ) throw();
// Pulse the event (signals waiting objects, then resets)
BOOL Pulse() throw();
// Set the event to the non-signaled state
BOOL Reset() throw();
// Set the event to the signaled state
BOOL Set() throw();
};
class CMutex :
public CHandle
{
public:
CMutex() throw();
CMutex( CMutex& h ) throw();
explicit CMutex( BOOL bInitialOwner );
CMutex( LPSECURITY_ATTRIBUTES pSecurity, BOOL bInitialOwner, LPCTSTR pszName );
explicit CMutex( HANDLE h ) throw();
// Create a new mutex
BOOL Create( LPSECURITY_ATTRIBUTES pSecurity, BOOL bInitialOwner, LPCTSTR pszName ) throw();
// Open an existing named mutex
BOOL Open( DWORD dwAccess, BOOL bInheritHandle, LPCTSTR pszName ) throw();
// Release ownership of the mutex
BOOL Release() throw();
};
class CSemaphore :
public CHandle
{
public:
CSemaphore() throw();
CSemaphore( CSemaphore& h ) throw();
CSemaphore( LONG nInitialCount, LONG nMaxCount );
CSemaphore( LPSECURITY_ATTRIBUTES pSecurity, LONG nInitialCount, LONG nMaxCount, LPCTSTR pszName );
explicit CSemaphore( HANDLE h ) throw();
// Create a new semaphore
BOOL Create( LPSECURITY_ATTRIBUTES pSecurity, LONG nInitialCount, LONG nMaxCount, LPCTSTR pszName ) throw();
// Open an existing named semaphore
BOOL Open( DWORD dwAccess, BOOL bInheritHandle, LPCTSTR pszName ) throw();
// Increase the count of the semaphore
BOOL Release( LONG nReleaseCount = 1, LONG* pnOldCount = NULL ) throw();
};
class CMutexLock
{
public:
CMutexLock( CMutex& mtx, bool bInitialLock = true );
~CMutexLock() throw();
void Lock();
void Unlock() throw();
// Implementation
private:
CMutex& m_mtx;
bool m_bLocked;
// Private to prevent accidental use
CMutexLock( const CMutexLock& ) throw();
CMutexLock& operator=( const CMutexLock& ) throw();
};
}; // namespace ATL
#include <atlsync.inl>
#ifndef _ATL_NO_PRAGMA_WARNINGS
#pragma warning(pop)
#endif // !_ATL_NO_PRAGMA_WARNINGS
#endif // __ATLSYNC_H__