1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- qreadwritelock.cpp -->
<title>QReadLocker Class | Qt Core 5.11</title>
<link rel="stylesheet" type="text/css" href="style/offline-simple.css" />
<script type="text/javascript">
document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css");
// loading style sheet breaks anchors that were jumped to before
// so force jumping to anchor again
setTimeout(function() {
var anchor = location.hash;
// need to jump to different anchor first (e.g. none)
location.hash = "#";
setTimeout(function() {
location.hash = anchor;
}, 0);
}, 0);
</script>
</head>
<body>
<div class="header" id="qtdocheader">
<div class="main">
<div class="main-rounded">
<div class="navigationbar">
<table><tr>
<td ><a href="../qtdoc/index.html">Qt 5.11</a></td><td ><a href="qtcore-index.html">Qt Core</a></td><td ><a href="qtcore-module.html">C++ Classes</a></td><td >QReadLocker</td></tr></table><table class="buildversion"><tr>
<td id="buildversion" width="100%" align="right">Qt 5.11.2 Reference Documentation</td>
</tr></table>
</div>
</div>
<div class="content">
<div class="line">
<div class="content mainContent">
<div class="sidebar">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#public-functions">Public Functions</a></li>
<li class="level1"><a href="#details">Detailed Description</a></li>
</ul>
</div>
<div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">QReadLocker Class</h1>
<!-- $$$QReadLocker-brief -->
<p>The <a href="qreadlocker.html">QReadLocker</a> class is a convenience class that simplifies locking and unlocking read-write locks for read access. <a href="#details">More...</a></p>
<!-- @@@QReadLocker -->
<div class="table"><table class="alignedsummary">
<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include <QReadLocker></span>
</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += core</td></tr></table></div><ul>
<li><a href="qreadlocker-members.html">List of all members, including inherited members</a></li>
</ul>
<p><b>Note:</b> All functions in this class are <a href="../qtdoc/threads-reentrancy.html">thread-safe</a>.</p>
<a name="public-functions"></a>
<h2 id="public-functions">Public Functions</h2>
<div class="table"><table class="alignedsummary">
<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="qreadlocker.html#QReadLocker">QReadLocker</a></b>(QReadWriteLock *<i>lock</i>)</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="qreadlocker.html#dtor.QReadLocker">~QReadLocker</a></b>()</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> QReadWriteLock *</td><td class="memItemRight bottomAlign"><b><a href="qreadlocker.html#readWriteLock">readWriteLock</a></b>() const</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="qreadlocker.html#relock">relock</a></b>()</td></tr>
<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="qreadlocker.html#unlock">unlock</a></b>()</td></tr>
</table></div>
<a name="details"></a>
<!-- $$$QReadLocker-description -->
<div class="descr">
<h2 id="details">Detailed Description</h2>
<p>The <a href="qreadlocker.html">QReadLocker</a> class is a convenience class that simplifies locking and unlocking read-write locks for read access.</p>
<p>The purpose of <a href="qreadlocker.html">QReadLocker</a> (and <a href="qwritelocker.html">QWriteLocker</a>) is to simplify <a href="qreadwritelock.html">QReadWriteLock</a> locking and unlocking. Locking and unlocking statements or in exception handling code is error-prone and difficult to debug. <a href="qreadlocker.html">QReadLocker</a> can be used in such situations to ensure that the state of the lock is always well-defined.</p>
<p>Here's an example that uses <a href="qreadlocker.html">QReadLocker</a> to lock and unlock a read-write lock for reading:</p>
<pre class="cpp">
<span class="type"><a href="qreadwritelock.html">QReadWriteLock</a></span> lock;
<span class="type"><a href="qbytearray.html">QByteArray</a></span> readData()
{
<span class="type"><a href="qreadlocker.html#QReadLocker">QReadLocker</a></span> locker(<span class="operator">&</span>lock);
<span class="operator">.</span><span class="operator">.</span><span class="operator">.</span>
<span class="keyword">return</span> data;
}
</pre>
<p>It is equivalent to the following code:</p>
<pre class="cpp">
<span class="type"><a href="qreadwritelock.html">QReadWriteLock</a></span> lock;
<span class="type"><a href="qbytearray.html">QByteArray</a></span> readData()
{
lock<span class="operator">.</span>lockForRead();
<span class="operator">.</span><span class="operator">.</span><span class="operator">.</span>
lock<span class="operator">.</span>unlock();
<span class="keyword">return</span> data;
}
</pre>
<p>The <a href="qmutexlocker.html">QMutexLocker</a> documentation shows examples where the use of a locker object greatly simplifies programming.</p>
</div>
<p><b>See also </b><a href="qwritelocker.html">QWriteLocker</a> and <a href="qreadwritelock.html">QReadWriteLock</a>.</p>
<!-- @@@QReadLocker -->
<div class="func">
<h2>Member Function Documentation</h2>
<!-- $$$QReadLocker[overload1]$$$QReadLockerQReadWriteLock* -->
<h3 class="fn" id="QReadLocker"><a name="QReadLocker"></a>QReadLocker::<span class="name">QReadLocker</span>(<span class="type"><a href="qreadwritelock.html">QReadWriteLock</a></span> *<i>lock</i>)</h3>
<p>Constructs a <a href="qreadlocker.html">QReadLocker</a> and locks <i>lock</i> for reading. The lock will be unlocked when the <a href="qreadlocker.html">QReadLocker</a> is destroyed. If <code>lock</code> is zero, <a href="qreadlocker.html">QReadLocker</a> does nothing.</p>
<p><b>See also </b><a href="qreadwritelock.html#lockForRead">QReadWriteLock::lockForRead</a>().</p>
<!-- @@@QReadLocker -->
<!-- $$$~QReadLocker[overload1]$$$~QReadLocker -->
<h3 class="fn" id="dtor.QReadLocker"><a name="dtor.QReadLocker"></a>QReadLocker::<span class="name">~QReadLocker</span>()</h3>
<p>Destroys the <a href="qreadlocker.html">QReadLocker</a> and unlocks the lock that was passed to the constructor.</p>
<p><b>See also </b><a href="qreadwritelock.html#unlock">QReadWriteLock::unlock</a>().</p>
<!-- @@@~QReadLocker -->
<!-- $$$readWriteLock[overload1]$$$readWriteLock -->
<h3 class="fn" id="readWriteLock"><a name="readWriteLock"></a><span class="type"><a href="qreadwritelock.html">QReadWriteLock</a></span> *QReadLocker::<span class="name">readWriteLock</span>() const</h3>
<p>Returns a pointer to the read-write lock that was passed to the constructor.</p>
<!-- @@@readWriteLock -->
<!-- $$$relock[overload1]$$$relock -->
<h3 class="fn" id="relock"><a name="relock"></a><span class="type">void</span> QReadLocker::<span class="name">relock</span>()</h3>
<p>Relocks an unlocked lock.</p>
<p><b>See also </b><a href="qreadlocker.html#unlock">unlock</a>().</p>
<!-- @@@relock -->
<!-- $$$unlock[overload1]$$$unlock -->
<h3 class="fn" id="unlock"><a name="unlock"></a><span class="type">void</span> QReadLocker::<span class="name">unlock</span>()</h3>
<p>Unlocks the lock associated with this locker.</p>
<p><b>See also </b><a href="qreadwritelock.html#unlock">QReadWriteLock::unlock</a>().</p>
<!-- @@@unlock -->
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<p>
<acronym title="Copyright">©</acronym> 2018 The Qt Company Ltd.
Documentation contributions included herein are the copyrights of
their respective owners.<br/> The documentation provided herein is licensed under the terms of the <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation License version 1.3</a> as published by the Free Software Foundation.<br/> Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property
of their respective owners. </p>
</div>
</body>
</html>