PageRenderTime 38ms CodeModel.GetById 32ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/vp_plugins/qt_single_apps/qtlockedfile.h

http://cupsfilter.googlecode.com/
C++ Header | 101 lines | 45 code | 11 blank | 45 comment | 3 complexity | e36f16b231ba307e1fb36419fd4d25f4 MD5 | raw file
  1/****************************************************************************
  2**
  3** This file is part of a Qt Solutions component.
  4** 
  5** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
  6** 
  7** Contact:  Qt Software Information (qt-info@nokia.com)
  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.0, 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 the sales department at qt-sales@nokia.com.
 44** 
 45****************************************************************************/
 46
 47#ifndef QTLOCKEDFILE_H
 48#define QTLOCKEDFILE_H
 49
 50#include <QtCore/QFile>
 51#ifdef Q_OS_WIN
 52#include <QtCore/QVector>
 53#endif
 54
 55#if defined(Q_WS_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
 71class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile
 72{
 73public:
 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
 87private:
 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