Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
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
4
#
include
<
QSemaphore
>
5
#
include
<
QSemaphoreReleaser
>
6
#
include
<
chrono
>
7
8
void
examples
()
9
{
10
{
11
//! [0]
12
QSemaphore sem(5);
// sem.available() == 5
13
14
sem.acquire(3);
// sem.available() == 2
15
sem.acquire(2);
// sem.available() == 0
16
sem.release(5);
// sem.available() == 5
17
sem.release(5);
// sem.available() == 10
18
19
sem.tryAcquire(1);
// sem.available() == 9, returns true
20
sem.tryAcquire(250);
// sem.available() == 9, returns false
21
//! [0]
22
}
23
24
{
25
//! [1]
26
QSemaphore sem(5);
// a semaphore that guards 5 resources
27
sem.acquire(5);
// acquire all 5 resources
28
sem.release(5);
// release the 5 resources
29
sem.release(10);
// "create" 10 new resources
30
//! [1]
31
}
32
33
{
34
//! [2]
35
QSemaphore sem(5);
// sem.available() == 5
36
sem.tryAcquire(250);
// sem.available() == 5, returns false
37
sem.tryAcquire(3);
// sem.available() == 2, returns true
38
//! [2]
39
}
40
41
{
42
//! [3]
43
QSemaphore sem(5);
// sem.available() == 5
44
sem.tryAcquire(250, 1000);
// sem.available() == 5, waits 1000 milliseconds and returns false
45
sem.tryAcquire(3, 30000);
// sem.available() == 2, returns true without waiting
46
//! [3]
47
}
48
49
{
50
using
namespace
std
::chrono_literals;
51
52
//! [tryAcquire-QDeadlineTimer]
53
QSemaphore sem(5);
// sem.available() == 5
54
sem.tryAcquire(250, QDeadlineTimer(1000));
// sem.available() == 5, waits 1000 milliseconds and returns false
55
sem.tryAcquire(3, QDeadlineTimer(30s));
// sem.available() == 2, returns true without waiting
56
//! [tryAcquire-QDeadlineTimer]
57
}
58
59
QSemaphore sem(5);
60
61
{
62
//! [4]
63
// ... do something that may throw or return early
64
sem.release();
65
//! [4]
66
}
67
68
{
69
//! [5]
70
const
QSemaphoreReleaser releaser(sem);
71
// ... do something that may throw or early return
72
// implicitly calls sem.release() here and at every other return in between
73
//! [5]
74
}
75
76
{
77
bool
someCondition;
78
79
//! [6]
80
{
// some scope
81
QSemaphoreReleaser releaser;
// does nothing
82
// ...
83
if
(someCondition) {
84
releaser = QSemaphoreReleaser(sem);
85
// ...
86
}
87
// ...
88
}
// conditionally calls sem.release(), depending on someCondition
89
//! [6]
90
}
91
92
{
93
QSemaphoreReleaser releaser;
94
95
//! [7]
96
releaser.cancel();
// avoid releasing old semaphore()
97
releaser = QSemaphoreReleaser(sem, 42);
98
// now will call sem.release(42) when 'releaser' is destroyed
99
//! [7]
100
}
101
}
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
examples
bool examples()
[3]
Definition
src_corelib_global_qglobal.cpp:56
qtbase
src
corelib
doc
snippets
code
src_corelib_thread_qsemaphore.cpp
Generated on
for Qt by
1.18.0