qtlockedfile.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2016 The Qt Company Ltd.
  4. ** Contact: https://www.qt.io/licensing/
  5. **
  6. ** This file is part of Qt Creator.
  7. **
  8. ** Commercial License Usage
  9. ** Licensees holding valid commercial Qt licenses may use this file in
  10. ** accordance with the commercial license agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and The Qt Company. For licensing terms
  13. ** and conditions see https://www.qt.io/terms-conditions. For further
  14. ** information use the contact form at https://www.qt.io/contact-us.
  15. **
  16. ** GNU General Public License Usage
  17. ** Alternatively, this file may be used under the terms of the GNU
  18. ** General Public License version 3 as published by the Free Software
  19. ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
  20. ** included in the packaging of this file. Please review the following
  21. ** information to ensure the GNU General Public License requirements will
  22. ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
  23. **
  24. ****************************************************************************/
  25. #pragma once
  26. #include <QFile>
  27. #if defined(Q_OS_WIN)
  28. # if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT)
  29. # define QT_QTLOCKEDFILE_EXPORT
  30. # elif defined(QT_QTLOCKEDFILE_IMPORT)
  31. # if defined(QT_QTLOCKEDFILE_EXPORT)
  32. # undef QT_QTLOCKEDFILE_EXPORT
  33. # endif
  34. # define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport)
  35. # elif defined(QT_QTLOCKEDFILE_EXPORT)
  36. # undef QT_QTLOCKEDFILE_EXPORT
  37. # define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport)
  38. # endif
  39. #else
  40. # define QT_QTLOCKEDFILE_EXPORT
  41. #endif
  42. namespace SharedTools {
  43. class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile
  44. {
  45. public:
  46. enum LockMode { NoLock = 0, ReadLock, WriteLock };
  47. QtLockedFile();
  48. QtLockedFile(const QString &name);
  49. ~QtLockedFile();
  50. bool lock(LockMode mode, bool block = true);
  51. bool unlock();
  52. bool isLocked() const;
  53. LockMode lockMode() const;
  54. private:
  55. #ifdef Q_OS_WIN
  56. Qt::HANDLE m_semaphore_hnd;
  57. Qt::HANDLE m_mutex_hnd;
  58. #endif
  59. LockMode m_lock_mode;
  60. };
  61. } // namespace SharedTools