/***************************************************************************\ * * File: Locks.h * * Description: * Locks.h defines a collection wrappers used to maintain critical sections * and other locking devices. * * * History: * 3/30/2000: JStall: Created * * Copyright (C) 2000 by Microsoft Corporation. All rights reserved. * \***************************************************************************/ #if !defined(BASE__Locks_h__INCLUDED) #define BASE__Locks_h__INCLUDED #pragma once #include "List.h" class CritLock { // Construction public: inline CritLock(); inline ~CritLock(); // Operations public: inline void Enter(); inline void Leave(); inline BOOL GetThreadSafe() const; inline void SetThreadSafe(BOOL fThreadSafe); // Data protected: CRITICAL_SECTION m_cs; BOOL m_fThreadSafe; }; template class AutoCleanup { public: ~AutoCleanup(); void Link(base * pItem); void Delete(base * pItem); void DeleteAll(); protected: GList m_lstItems; CritLock m_lock; }; template inline derived * New(AutoCleanup & lstItems); inline BOOL IsMultiThreaded(); #if 1 inline long SafeIncrement(volatile long * pl); inline long SafeDecrement(volatile long * pl); inline void SafeEnter(volatile CRITICAL_SECTION * pcs); inline void SafeLeave(volatile CRITICAL_SECTION * pcs); #endif #include "Locks.inl" #endif // BASE__Locks_h__INCLUDED