1 /* 2 Copyright (C) 2004-2008 Grame 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU Lesser General Public License as published by 6 the Free Software Foundation; either version 2.1 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public License 15 along with this program; if not, write to the Free Software 16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 18 */ 19 20 #ifndef __JackWinProcessSync__ 21 #define __JackWinProcessSync__ 22 23 #include "JackWinMutex.h" 24 25 namespace Jack 26 { 27 28 /*! 29 \brief A synchronization primitive built using a condition variable. 30 */ 31 32 class JackWinProcessSync : public JackWinMutex 33 { 34 35 private: 36 37 HANDLE fEvent; 38 39 public: 40 JackWinMutex(name)41 JackWinProcessSync(const char* name = NULL):JackWinMutex(name) 42 { 43 if (name) { 44 char buffer[MAX_PATH]; 45 snprintf(buffer, sizeof(buffer), "%s_%s", "JackWinProcessSync", name); 46 fEvent = CreateEvent(NULL, TRUE, FALSE, buffer); // Needs ResetEvent 47 //fEvent = CreateEvent(NULL, FALSE, FALSE, buffer); // Auto-reset event 48 } else { 49 fEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // Needs ResetEvent 50 //fEvent = CreateEvent(NULL, FALSE, FALSE, NULL); // Auto-reset event 51 } 52 53 ThrowIf((fEvent == 0), JackException("JackWinProcessSync: could not init the event")); 54 } ~JackWinProcessSync()55 virtual ~JackWinProcessSync() 56 { 57 CloseHandle(fEvent); 58 } 59 60 bool TimedWait(long usec); 61 bool LockedTimedWait(long usec); 62 63 void Wait(); 64 void LockedWait(); 65 66 void Signal(); 67 void LockedSignal(); 68 69 void SignalAll(); 70 void LockedSignalAll(); 71 }; 72 73 } // end of namespace 74 75 #endif 76 77