1 /**************************************************************************** 2 ** 3 ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 4 ** All rights reserved. 5 ** Contact: Nokia Corporation (qt-info@nokia.com) 6 ** 7 ** This file is part of a Qt Solutions component. 8 ** 9 ** Commercial Usage 10 ** Licensees holding valid Qt Commercial licenses may use this file in 11 ** accordance with the Qt Solutions Commercial License Agreement provided 12 ** with the Software or, alternatively, in accordance with the terms 13 ** contained in a written agreement between you and Nokia. 14 ** 15 ** GNU Lesser General Public License Usage 16 ** Alternatively, this file may be used under the terms of the GNU Lesser 17 ** General Public License version 2.1 as published by the Free Software 18 ** Foundation and appearing in the file LICENSE.LGPL included in the 19 ** packaging of this file. Please review the following information to 20 ** ensure the GNU Lesser General Public License version 2.1 requirements 21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 22 ** 23 ** In addition, as a special exception, Nokia gives you certain 24 ** additional rights. These rights are described in the Nokia Qt LGPL 25 ** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this 26 ** package. 27 ** 28 ** GNU General Public License Usage 29 ** Alternatively, this file may be used under the terms of the GNU 30 ** General Public License version 3.0 as published by the Free Software 31 ** Foundation and appearing in the file LICENSE.GPL included in the 32 ** packaging of this file. Please review the following information to 33 ** ensure the GNU General Public License version 3.0 requirements will be 34 ** met: http://www.gnu.org/copyleft/gpl.html. 35 ** 36 ** Please note Third Party Software included with Qt Solutions may impose 37 ** additional restrictions and it is the user's responsibility to ensure 38 ** that they have met the licensing requirements of the GPL, LGPL, or Qt 39 ** Solutions Commercial license and the relevant license of the Third 40 ** Party Software they are using. 41 ** 42 ** If you are unsure which license is appropriate for your use, please 43 ** contact Nokia at qt-info@nokia.com. 44 ** 45 ****************************************************************************/ 46 47 #ifndef QTLOCKEDFILE_H 48 #define QTLOCKEDFILE_H 49 50 #include <QFile> 51 #ifdef Q_OS_WIN 52 #include <QVector> 53 #endif 54 55 #if defined(Q_OS_WIN) 56 # if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT) 57 # define QT_QTLOCKEDFILE_EXPORT 58 # elif defined(QT_QTLOCKEDFILE_IMPORT) 59 # if defined(QT_QTLOCKEDFILE_EXPORT) 60 # undef QT_QTLOCKEDFILE_EXPORT 61 # endif 62 # define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport) 63 # elif defined(QT_QTLOCKEDFILE_EXPORT) 64 # undef QT_QTLOCKEDFILE_EXPORT 65 # define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport) 66 # endif 67 #else 68 # define QT_QTLOCKEDFILE_EXPORT 69 #endif 70 71 class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile 72 { 73 public: 74 enum LockMode { NoLock = 0, ReadLock, WriteLock }; 75 76 QtLockedFile(); 77 QtLockedFile(const QString &name); 78 ~QtLockedFile(); 79 80 bool open(OpenMode mode); 81 82 bool lock(LockMode mode, bool block = true); 83 bool unlock(); 84 bool isLocked() const; 85 LockMode lockMode() const; 86 87 private: 88 #ifdef Q_OS_WIN 89 Qt::HANDLE wmutex; 90 Qt::HANDLE rmutex; 91 QVector<Qt::HANDLE> rmutexes; 92 QString mutexname; 93 94 Qt::HANDLE getMutexHandle(int idx, bool doCreate); 95 bool waitMutex(Qt::HANDLE mutex, bool doBlock); 96 97 #endif 98 LockMode m_lock_mode; 99 }; 100 101 #endif 102