1 /***************************************************************************** 2 3 Mutex 4 5 *****************************************************************************/ 6 7 8 #ifndef MUTEX_H 9 #define MUTEX_H 10 11 12 #include "Unfrag.h" 13 14 15 class Mutex 16 { 17 public: 18 Mutex () 19 { 20 // NT only code begin ... Win9x disregards this part 21 SECURITY_ATTRIBUTES MutexAttribs; 22 23 memset (&MutexAttribs, 0, sizeof (SECURITY_ATTRIBUTES)); 24 25 MutexAttribs.bInheritHandle = false; 26 MutexAttribs.nLength = sizeof (SECURITY_ATTRIBUTES); 27 MutexAttribs.lpSecurityDescriptor = NULL; 28 // NT only code end 29 30 Locked = false; 31 LockCount = 0; 32 MutexHandle = CreateMutex (&MutexAttribs, Locked, NULL); 33 34 return; 35 } 36 37 ~Mutex () 38 { 39 Lock (); 40 CloseHandle (MutexHandle); 41 } 42 43 void Lock (void) 44 { 45 Locked = true; 46 WaitForSingleObject (MutexHandle, INFINITE); 47 LockCount += 1; 48 return; 49 } 50 51 52 void Unlock (void) 53 { 54 LockCount -= 1; 55 if (LockCount <= 0) 56 { 57 LockCount = 0; 58 Locked = false; 59 } 60 61 ReleaseMutex (MutexHandle); 62 return; 63 } 64 65 66 bool IsLocked (void) 67 { 68 return (Locked); 69 } 70 71 protected: 72 uint32 LockCount; 73 HANDLE MutexHandle; 74 bool Locked; 75 }; 76 77 78 #endif // MUTEX_H 79