/* ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" Copyright 2004-9 by Raw Material Software Ltd. ------------------------------------------------------------------------------ JUCE can be redistributed and/or modified under the terms of the GNU General Public License (Version 2), as published by the Free Software Foundation. A copy of the license is included in the JUCE distribution, or can be found online at www.gnu.org/licenses. JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.rawmaterialsoftware.com/juce for more information. ============================================================================== */ #ifndef __JUCE_INTERPROCESSLOCK_JUCEHEADER__ #define __JUCE_INTERPROCESSLOCK_JUCEHEADER__ #include "../text/juce_String.h" //============================================================================== /** Acts as a critical section which processes can use to block each other. @see CriticalSection */ class JUCE_API InterProcessLock { public: //============================================================================== /** Creates a lock object. @param name a name that processes will use to identify this lock object */ InterProcessLock (const String& name); /** Destructor. This will also release the lock if it's currently held by this process. */ ~InterProcessLock(); //============================================================================== /** Attempts to lock the critical section. @param timeOutMillisecs how many milliseconds to wait if the lock is already held by another process - a value of 0 will return immediately, negative values will wait forever @returns true if the lock could be gained within the timeout period, or false if the timeout expired. */ bool enter (int timeOutMillisecs = -1); /** Releases the lock if it's currently held by this process. */ void exit(); //============================================================================== juce_UseDebuggingNewOperator private: //============================================================================== #if JUCE_WINDOWS void* internal; #elif JUCE_64BIT long long internal; #else int internal; #endif String name; int reentrancyLevel; InterProcessLock (const InterProcessLock&); const InterProcessLock& operator= (const InterProcessLock&); }; #endif // __JUCE_INTERPROCESSLOCK_JUCEHEADER__