Qt 4.8
qsystemsemaphore.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtCore module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #include "qsystemsemaphore.h"
43 #include "qsystemsemaphore_p.h"
44 #include <qglobal.h>
45 
47 
48 #ifndef QT_NO_SYSTEMSEMAPHORE
49 
180 {
181  setKey(key, initialValue, mode);
182 }
183 
200 {
201  d->cleanHandle();
202 }
203 
241 void QSystemSemaphore::setKey(const QString &key, int initialValue, AccessMode mode)
242 {
243  if (key == d->key && mode == Open)
244  return;
245  d->error = NoError;
246  d->errorString = QString();
247 #if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN) && !defined(QT_POSIX_IPC)
248  // optimization to not destroy/create the file & semaphore
249  if (key == d->key && mode == Create && d->createdSemaphore && d->createdFile) {
250  d->initialValue = initialValue;
251  d->unix_key = -1;
252  d->handle(mode);
253  return;
254  }
255 #endif
256  d->cleanHandle();
257  d->key = key;
258  d->initialValue = initialValue;
259  // cache the file name so it doesn't have to be generated all the time.
260  d->fileName = d->makeKeyFileName();
261  d->handle(mode);
262 }
263 
271 {
272  return d->key;
273 }
274 
289 {
290  return d->modifySemaphore(-1);
291 }
292 
315 {
316  if (n == 0)
317  return true;
318  if (n < 0) {
319  qWarning("QSystemSemaphore::release: n is negative.");
320  return false;
321  }
322  return d->modifySemaphore(n);
323 }
324 
332 {
333  return d->error;
334 }
335 
367 {
368  return d->errorString;
369 }
370 
371 #endif // QT_NO_SYSTEMSEMAPHORE
372 
double d
Definition: qnumeric_p.h:62
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
QString makeKeyFileName() const
QString errorString() const
Returns a text description of the last error that occurred.
The QString class provides a Unicode character string.
Definition: qstring.h:83
QSystemSemaphore(const QString &key, int initialValue=0, AccessMode mode=Open)
Requests a system semaphore for the specified key.
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
Q_CORE_EXPORT void qWarning(const char *,...)
AccessMode
This enum is used by the constructor and setKey().
QSystemSemaphore::SystemSemaphoreError error
QScopedPointer< QSystemSemaphorePrivate > d
SystemSemaphoreError error() const
Returns a value indicating whether an error occurred, and, if so, which error it was.
int key
void setKey(const QString &key, int initialValue=0, AccessMode mode=Open)
This function works the same as the constructor.
bool release(int n=1)
Releases n resources guarded by the semaphore.
HANDLE handle(QSystemSemaphore::AccessMode mode=QSystemSemaphore::Open)
~QSystemSemaphore()
The destructor destroys the QSystemSemaphore object, but the underlying system semaphore is not remov...
QString key() const
Returns the key assigned to this system semaphore.
bool acquire()
Acquires one of the resources guarded by this semaphore, if there is one available, and returns true.