www.pudn.com > acdx.rar > Lock.h


////////////////////////////////////////////////////////////////////////  
// Lock.h: interface for the Lock class. 
// 
 
 
#if !defined(Lock_H) 
#define Lock_H 
 
 
#include  
using namespace std; 
 
///////////////////////////////////////////////// 
// Lock 
 
//##ModelId=424BB64301AD 
class Lock 
{ 
public: 
	//##ModelId=424BB64301AE 
	HANDLE		m_hMutex;			// used to lock/unlock object access 
	//##ModelId=424BB64301AF 
	bool		m_attached;			// shows attached to existing lock 
 
 
	////////////////////////////////////////////////////////////////////// 
	// Construction/Destruction 
	////////////////////////////////////////////////////////////////////// 
 
	//##ModelId=424BB64301BD 
	Lock( string & lockName ) : 
		m_hMutex(NULL), 
		m_attached(false) 
	{ 
		createLock(lockName); 
	} 
 
	//##ModelId=424BB64301BF 
	Lock() : 
		m_hMutex(NULL), 
		m_attached(false) 
	{ 
		createLock(); 
	} 
 
	//##ModelId=424BB64301C0 
	Lock( HANDLE hMutex ) : 
		m_hMutex(NULL), 
		m_attached(false) 
	{ 
		if ( hMutex != NULL ) 
		{ 
			m_hMutex  = hMutex; 
			m_attached = true; 
		} 
	} 
 
 
	//##ModelId=424BB64301CD 
	virtual ~Lock() 
	{ 
		release(); 
	} 
 
	//##ModelId=424BB64301CF 
	void release () 
	{ 
		destroyLock(); 
	} 
 
	///////////////////////////////////////////////////////////// 
	// access object fxns 
 
	//##ModelId=424BB64301D0 
	bool lock	() 
	{ 
		if ( m_hMutex == NULL ) 
			return false; 
 
		WaitForSingleObject( m_hMutex, INFINITE ); 
 
		return true; 
	} 
 
 
	//##ModelId=424BB64301DC 
	void unlock () 
	{ 
		ReleaseMutex(m_hMutex); 
	} 
 
	//##ModelId=424BB64301DD 
	bool createLock ( string & lockName ) 
	{ 
		// return object mutex 
		m_hMutex = ::CreateMutex( NULL, false, lockName.c_str() ); 
		if ( m_hMutex == 0 ) 
			return false; 
 
		return true; 
	} 
 
	//##ModelId=424BB64301DF 
	bool createLock () 
	{ 
		// return object mutex 
		m_hMutex = ::CreateMutex( NULL, false, 0 ); 
		if ( m_hMutex == 0 ) 
			return false; 
 
		return true; 
	} 
 
	//##ModelId=424BB64301EC 
	static bool createLock ( HANDLE & hMutex ) 
	{ 
		// return object mutex 
		hMutex = ::CreateMutex( NULL, false, 0 ); 
		if ( hMutex == 0 ) 
			return false; 
 
		return true; 
	} 
 
 
	//##ModelId=424BB64301EF 
	void destroyLock () 
	{ 
		if ( !m_attached ) 
		{ 
			if ( m_hMutex != NULL ) 
			{ 
				::CloseHandle( m_hMutex ); 
			} 
		} 
 
		m_attached = false; 
		m_hMutex   = NULL; 
	} 
 
}; 
 
 
 
 
 
 
 
 
 
 
 
 
#endif