97 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /****************************************************************************
 | |
| **
 | |
| ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
 | |
| ** Contact: http://www.qt-project.org/legal
 | |
| **
 | |
| ** This file is part of the Qt Solutions component.
 | |
| **
 | |
| ** $QT_BEGIN_LICENSE:BSD$
 | |
| ** You may use this file under the terms of the BSD license as follows:
 | |
| **
 | |
| ** "Redistribution and use in source and binary forms, with or without
 | |
| ** modification, are permitted provided that the following conditions are
 | |
| ** met:
 | |
| **   * Redistributions of source code must retain the above copyright
 | |
| **     notice, this list of conditions and the following disclaimer.
 | |
| **   * Redistributions in binary form must reproduce the above copyright
 | |
| **     notice, this list of conditions and the following disclaimer in
 | |
| **     the documentation and/or other materials provided with the
 | |
| **     distribution.
 | |
| **   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
 | |
| **     of its contributors may be used to endorse or promote products derived
 | |
| **     from this software without specific prior written permission.
 | |
| **
 | |
| **
 | |
| ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | |
| ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | |
| ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | |
| ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | |
| ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | |
| ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | |
| ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | |
| ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | |
| ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
| ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | |
| ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
 | |
| **
 | |
| ** $QT_END_LICENSE$
 | |
| **
 | |
| ****************************************************************************/
 | |
| 
 | |
| #ifndef QTLOCKEDFILE_H
 | |
| #define QTLOCKEDFILE_H
 | |
| 
 | |
| #include <QFile>
 | |
| #ifdef Q_OS_WIN
 | |
| #include <QVector>
 | |
| #endif
 | |
| 
 | |
| #if defined(Q_OS_WIN)
 | |
| #  if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT)
 | |
| #    define QT_QTLOCKEDFILE_EXPORT
 | |
| #  elif defined(QT_QTLOCKEDFILE_IMPORT)
 | |
| #    if defined(QT_QTLOCKEDFILE_EXPORT)
 | |
| #      undef QT_QTLOCKEDFILE_EXPORT
 | |
| #    endif
 | |
| #    define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport)
 | |
| #  elif defined(QT_QTLOCKEDFILE_EXPORT)
 | |
| #    undef QT_QTLOCKEDFILE_EXPORT
 | |
| #    define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport)
 | |
| #  endif
 | |
| #else
 | |
| #  define QT_QTLOCKEDFILE_EXPORT
 | |
| #endif
 | |
| 
 | |
| namespace QtLP_Private {
 | |
| 
 | |
| class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile
 | |
| {
 | |
| public:
 | |
|     enum LockMode { NoLock = 0, ReadLock, WriteLock };
 | |
| 
 | |
|     QtLockedFile();
 | |
|     QtLockedFile(const QString &name);
 | |
|     ~QtLockedFile();
 | |
| 
 | |
|     bool open(OpenMode mode);
 | |
| 
 | |
|     bool lock(LockMode mode, bool block = true);
 | |
|     bool unlock();
 | |
|     bool isLocked() const;
 | |
|     LockMode lockMode() const;
 | |
| 
 | |
| private:
 | |
| #ifdef Q_OS_WIN
 | |
|     Qt::HANDLE wmutex;
 | |
|     Qt::HANDLE rmutex;
 | |
|     QVector<Qt::HANDLE> rmutexes;
 | |
|     QString mutexname;
 | |
| 
 | |
|     Qt::HANDLE getMutexHandle(int idx, bool doCreate);
 | |
|     bool waitMutex(Qt::HANDLE mutex, bool doBlock);
 | |
| 
 | |
| #endif
 | |
|     LockMode m_lock_mode;
 | |
| };
 | |
| }
 | |
| #endif
 |