Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
src_corelib_thread_qsemaphore.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
3
5QSemaphore sem(5); // sem.available() == 5
6
7sem.acquire(3); // sem.available() == 2
8sem.acquire(2); // sem.available() == 0
9sem.release(5); // sem.available() == 5
10sem.release(5); // sem.available() == 10
11
12sem.tryAcquire(1); // sem.available() == 9, returns true
13sem.tryAcquire(250); // sem.available() == 9, returns false
15
16
18QSemaphore sem(5); // a semaphore that guards 5 resources
19sem.acquire(5); // acquire all 5 resources
20sem.release(5); // release the 5 resources
21sem.release(10); // "create" 10 new resources
23
24
26QSemaphore sem(5); // sem.available() == 5
27sem.tryAcquire(250); // sem.available() == 5, returns false
28sem.tryAcquire(3); // sem.available() == 2, returns true
30
31
33QSemaphore sem(5); // sem.available() == 5
34sem.tryAcquire(250, 1000); // sem.available() == 5, waits 1000 milliseconds and returns false
35sem.tryAcquire(3, 30000); // sem.available() == 2, returns true without waiting
37
39QSemaphore sem(5); // sem.available() == 5
40sem.tryAcquire(250, QDeadlineTimer(1000)); // sem.available() == 5, waits 1000 milliseconds and returns false
41sem.tryAcquire(3, QDeadlineTimer(30s)); // sem.available() == 2, returns true without waiting
43
45// ... do something that may throw or return early
48
51// ... do something that may throw or early return
52// implicitly calls sem.release() here and at every other return in between
54
56{ // some scope
57 QSemaphoreReleaser releaser; // does nothing
58 // ...
59 if (someCondition) {
61 // ...
62 }
63 // ...
64} // conditionally calls sem.release(), depending on someCondition
66
68releaser.cancel(); // avoid releasing old semaphore()
70// now will call sem.release(42) when 'releaser' is destroyed
\inmodule QtCore
The QSemaphoreReleaser class provides exception-safe deferral of a QSemaphore::release() call.
Definition qsemaphore.h:67
QSemaphore * cancel() noexcept
Cancels this QSemaphoreReleaser such that the destructor will no longer call {semaphore()->release()}...
Definition qsemaphore.h:97
\inmodule QtCore
Definition qsemaphore.h:18
void acquire(int n=1)
Tries to acquire n resources guarded by the semaphore.
bool tryAcquire(int n=1)
Tries to acquire n resources guarded by the semaphore and returns true on success.
void release(int n=1)
Releases n resources guarded by the semaphore.
GLdouble s
[6]
Definition qopenglext.h:235
const QSemaphoreReleaser releaser(sem)
[4]
QSemaphore sem(5)
[0]