www.pudn.com > acdx.rar > Lock.h
//////////////////////////////////////////////////////////////////////// // Lock.h: interface for the Lock class. // #if !defined(Lock_H) #define Lock_H #includeusing 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