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
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Qt Toolkit - QMutex Class</title><style type="text/css"><!--
h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }body { background: white; color: black; }
--></style>
</head><body bgcolor="#ffffff">
<table width="100%">
<tr><td><a href="index.html">
<img width="100" height="100" src="qtlogo.png"
alt="Home" border="0"><img width="100"
height="100" src="face.png" alt="Home" border="0">
</a><td valign=top><div align=right><img src="dochead.png" width="472" height="27"><br>
<a href="classes.html"><b>Classes</b></a>
-<a href="annotated.html">Annotated</a>
- <a href="hierarchy.html">Tree</a>
-<a href="functions.html">Functions</a>
-<a href="index.html">Home</a>
-<a href="topicals.html"><b>Structure</b></a>
</div>
</table>
<h1 align=center>QMutex Class Reference</h1><br clear="all">
<p>
The QMutex class provides access serialization between threads.
<a href="#details">More...</a>
<p>
<code>#include <<a href="qthread-h.html">qthread.h</a>></code>
<p>
Inherits <a href="qt.html">Qt</a>.
<p><a href="qmutex-members.html">List of all member functions.</a>
<h2>Public Members</h2>
<ul>
<li><div class="fn"><a href="#29e2e7"><b>QMutex</b></a>(boolrecursive=FALSE)</div>
<li><div class="fn">virtual<a href="#9ef650"><b>~QMutex</b></a>()</div>
<li><div class="fn">void<a href="#4e6e5d"><b>lock</b></a>()</div>
<li><div class="fn">void<a href="#da15c3"><b>unlock</b></a>()</div>
<li><div class="fn">bool<a href="#b61471"><b>locked</b></a>()</div>
</ul>
<hr><h2><a name="details"></a>Detailed Description</h2>
The QMutex class provides access serialization between threads.
<p>
The purpose of a QMutex is to protect an object, data structure
or section of code so that only one thread can access it at a time
(In Java terms, this is similar to the synchronized keyword).
For example, say there is a method which prints a message to the
user on two lines:
<p><pre> void someMethod()
{
<a href="qapplication.html#72e78c">qDebug</a>("Hello");
<a href="qapplication.html#72e78c">qDebug</a>("World");
}
</pre>
<p>If this method is called simultaneously from two threads then
the following sequence could result:
<p><pre> Hello
Hello
World
World
</pre>
<p>If we add a mutex:
<p><pre> <a href="qmutex.html">QMutex</a> mutex;
void someMethod()
{
mutex.<a href="#4e6e5d">lock</a>();
<a href="qapplication.html#72e78c">qDebug</a>("Hello");
<a href="qapplication.html#72e78c">qDebug</a>("World");
mutex.<a href="#da15c3">unlock</a>();
}
</pre>
<p>In Java terms this would be:
<p><pre> void someMethod()
{
synchronized {
<a href="qapplication.html#72e78c">qDebug</a>("Hello");
<a href="qapplication.html#72e78c">qDebug</a>("World");
}
}
</pre>
<p>Then only one thread can execute someMethod at a time and the order
of messages is always correct. This is a trivial example, of course,
but applies to any other case where things need to happen in a particular
sequence.
<hr><h2>Member Function Documentation</h2>
<h3 class="fn"><a name="29e2e7"></a>QMutex::QMutex(boolrecursive=FALSE)</h3>
<p>Constructs a new mutex. The mutex is created in an unlocked state. A
recursive mutex is created if <em>recursive</em> is TRUE; a normal mutex is
created if <em>recursive</em> is FALSE (default argument). With a recursive
mutex, a thread can lock the same mutex multiple times and it will
not be unlocked until a corresponding number of <a href="#da15c3">unlock</a>() calls have
been made.
<h3 class="fn"><a name="9ef650"></a>QMutex::~QMutex() <code>[virtual]</code></h3>
<p>Destroys the mutex.
<h3 class="fn">void<a name="4e6e5d"></a>QMutex::lock()</h3>
<p>Attempt to lock the mutex. If another thread has locked the mutex
then this call will block until that thread has unlocked it.
<p>See also <a href="#da15c3">unlock</a>().
<h3 class="fn">bool<a name="b61471"></a>QMutex::locked()</h3>
<p>Returns TRUE if the mutex is locked by another thread and FALSE if not.
<p><em>NOTE:</em> Due to differing implementations of recursive mutexes on various
platforms, calling this function from the same thread that previous locked
the mutex will return undefined results.
<h3 class="fn">void<a name="da15c3"></a>QMutex::unlock()</h3>
<p>Unlocks the mutex. Attempting to unlock a mutex in a different thread
to the one that locked it results in an error. Unlocking a mutex that
is not locked results in undefined behaviour (varies between
different Operating Systems' thread implementations).
<p>See also <a href="#4e6e5d">lock</a>().
<hr><p>
Search the documentation, FAQ, qt-interest archive and more (uses
<a href="http://www.trolltech.com">www.trolltech.com</a>):<br>
<form method=post action="http://www.trolltech.com/search.cgi">
<input type=hidden name="version" value="2.3.2"><nobr>
<input size="50" name="search"><input type=submit value="Search">
</nobr></form><hr><p>
This file is part of the <a href="index.html">Qt toolkit</a>,
copyright © 1995-2001
<a href="http://www.trolltech.com">Trolltech</a>, all rights reserved.<p><address><hr><div align="center">
<table width="100%" cellspacing="0" border="0"><tr>
<td>Copyright 2001 Trolltech<td><a href="http://www.trolltech.com/trademarks.html">Trademarks</a>
<td align="right"><div align="right">Qt version 2.3.2</div>
</table></div></address></body></html>
|