Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > e63754dc5af9f9ec95223fcea9485104 > files > 1708

python3-PyQt4-devel-4.8.3-2.fc14.x86_64.rpm

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html><head><title>QMutex Class Reference</title><style>h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
td.postheader { font-family: sans-serif }
tr.address { font-family: sans-serif }
body { background: #ffffff; color: black; }
</style></head><body><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr /><td align="left" valign="top" width="32"><img align="left" border="0" height="32" src="images/rb-logo.png" width="32" /></td><td width="1">&#160;&#160;</td><td class="postheader" valign="center"><a href="../pyqt4ref.html"><font color="#004faf">Home</font></a>&#160;&#183; <a href="classes.html"><font color="#004faf">All Classes</font></a>&#160;&#183; <a href="modules.html"><font color="#004faf">Modules</font></a></td></table><h1 align="center">QMutex Class Reference<br /><sup><sup>[<a href="qtcore.html">QtCore</a> module]</sup></sup></h1><p>The QMutex class provides access serialization between threads.
<a href="#details">More...</a></p>

<h3>Types</h3><ul><li><div class="fn" />enum <b><a href="qmutex.html#RecursionMode-enum">RecursionMode</a></b> { NonRecursive, Recursive }</li></ul><h3>Methods</h3><ul><li><div class="fn" /><b><a href="qmutex.html#QMutex">__init__</a></b> (<i>self</i>, RecursionMode&#160;<i>mode</i>&#160;=&#160;QMutex.NonRecursive)</li><li><div class="fn" /><b><a href="qmutex.html#lock">lock</a></b> (<i>self</i>)</li><li><div class="fn" />bool <b><a href="qmutex.html#tryLock">tryLock</a></b> (<i>self</i>)</li><li><div class="fn" />bool <b><a href="qmutex.html#tryLock-2">tryLock</a></b> (<i>self</i>, int&#160;<i>timeout</i>)</li><li><div class="fn" /><b><a href="qmutex.html#unlock">unlock</a></b> (<i>self</i>)</li></ul><a name="details" /><hr /><h2>Detailed Description</h2><p>The QMutex class provides access serialization between
threads.</p>
<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
(this is similar to the Java <tt>synchronized</tt> keyword). It is
usually best to use a mutex with a <a href="qmutexlocker.html">QMutexLocker</a> since this makes it easy to
ensure that locking and unlocking are performed consistently.</p>
<p>For example, say there is a method that prints a message to the
user on two lines:</p>
<pre class="highlightedCode brush: cpp">
 int number = 6;

 void method1()
 {
     number *= 5;
     number /= 4;
 }

 void method2()
 {
     number *= 3;
     number /= 2;
 }
</pre>
<p>If these two methods are called in succession, the following
happens:</p>
<pre class="highlightedCode brush: cpp">
<span class="comment"> // method1()</span>
 number *= 5;        <span class="comment">// number is now 30</span>
 number /= 4;        <span class="comment">// number is now 7</span>

<span class="comment"> // method2()</span>
 number *= 3;        <span class="comment">// number is now 21</span>
 number /= 2;        <span class="comment">// number is now 10</span>
</pre>
<p>If these two methods are called simultaneously from two threads
then the following sequence could result:</p>
<pre class="highlightedCode brush: cpp">
<span class="comment"> // Thread 1 calls method1()</span>
 number *= 5;        <span class="comment">// number is now 30</span>

<span class="comment"> // Thread 2 calls method2().</span>
<span class="comment"> //</span>
<span class="comment"> // Most likely Thread 1 has been put to sleep by the operating</span>
<span class="comment"> // system to allow Thread 2 to run.</span>
 number *= 3;        <span class="comment">// number is now 90</span>
 number /= 2;        <span class="comment">// number is now 45</span>

<span class="comment"> // Thread 1 finishes executing.</span>
 number /= 4;        <span class="comment">// number is now 11, instead of 10</span>
</pre>
<p>If we add a mutex, we should get the result we want:</p>
<pre class="highlightedCode brush: cpp">
 QMutex mutex;
 int number = 6;

 void method1()
 {
     mutex.lock();
     number *= 5;
     number /= 4;
     mutex.unlock();
 }

 void method2()
 {
     mutex.lock();
     number *= 3;
     number /= 2;
     mutex.unlock();
 }
</pre>
<p>Then only one thread can modify <tt>number</tt> at any given
time and the result is correct. This is a trivial example, of
course, but applies to any other case where things need to happen
in a particular sequence.</p>
<p>When you call <a href="qmutex.html#lock">lock</a>() in a thread,
other threads that try to call <a href="qmutex.html#lock">lock</a>() in the same place will block until
the thread that got the lock calls <a href="qmutex.html#unlock">unlock</a>(). A non-blocking alternative to
<a href="qmutex.html#lock">lock</a>() is <a href="qmutex.html#tryLock">tryLock</a>().</p>
<hr /><h2>Type Documentation</h2><h3 class="fn"><a name="RecursionMode-enum" />QMutex.RecursionMode</h3><table class="valuelist">
<tr class="odd">
<td />
</tr>
<tr>
<th class="tblConst">Constant</th>
<th class="tblval">Value</th>
<th class="tbldscr">Description</th>
</tr>
<tr>
<td class="topAlign"><tt>QMutex.Recursive</tt></td>
<td class=" topAlign"><tt>1</tt></td>
<td class="topAlign">In this mode, a thread can lock the same mutex
multiple times and the mutex won't be unlocked until a
corresponding number of <a href="qmutex.html#unlock">unlock</a>()
calls have been made.</td>
</tr>
<tr>
<td class="topAlign"><tt>QMutex.NonRecursive</tt></td>
<td class=" topAlign"><tt>0</tt></td>
<td class="topAlign">In this mode, a thread may only lock a mutex
once.</td>
</tr>
</table>
<p>See also <a href="qmutex.html#QMutex">QMutex</a>().</p>
<hr /><h2>Method Documentation</h2><h3 class="fn"><a name="QMutex" />QMutex.__init__ (<i>self</i>, <a href="qmutex.html#RecursionMode-enum">RecursionMode</a>&#160;<i>mode</i>&#160;=&#160;QMutex.NonRecursive)</h3><p>Constructs a new mutex. The mutex is created in an unlocked
state.</p>
<p>If <i>mode</i> is <a href="qmutex.html#RecursionMode-enum">QMutex.Recursive</a>, a thread
can lock the same mutex multiple times and the mutex won't be
unlocked until a corresponding number of <a href="qmutex.html#unlock">unlock</a>() calls have been made. The default
is <a href="qmutex.html#RecursionMode-enum">QMutex.NonRecursive</a>.</p>
<p>See also <a href="qmutex.html#lock">lock</a>() and <a href="qmutex.html#unlock">unlock</a>().</p>


<h3 class="fn"><a name="lock" />QMutex.lock (<i>self</i>)</h3><p>Locks the mutex. If another thread has locked the mutex then
this call will block until that thread has unlocked it.</p>
<p>Calling this function multiple times on the same mutex from the
same thread is allowed if this mutex is a <a href="qmutex.html#RecursionMode-enum">recursive mutex</a>. If this mutex
is a <a href="qmutex.html#RecursionMode-enum">non-recursive
mutex</a>, this function will <i>dead-lock</i> when the mutex is
locked recursively.</p>
<p>See also <a href="qmutex.html#unlock">unlock</a>().</p>


<h3 class="fn"><a name="tryLock" />bool QMutex.tryLock (<i>self</i>)</h3><p>Attempts to lock the mutex. If the lock was obtained, this
function returns true. If another thread has locked the mutex, this
function returns false immediately.</p>
<p>If the lock was obtained, the mutex must be unlocked with
<a href="qmutex.html#unlock">unlock</a>() before another thread can
successfully lock it.</p>
<p>Calling this function multiple times on the same mutex from the
same thread is allowed if this mutex is a <a href="qmutex.html#RecursionMode-enum">recursive mutex</a>. If this mutex
is a <a href="qmutex.html#RecursionMode-enum">non-recursive
mutex</a>, this function will <i>always</i> return false when
attempting to lock the mutex recursively.</p>
<p>See also <a href="qmutex.html#lock">lock</a>() and <a href="qmutex.html#unlock">unlock</a>().</p>


<h3 class="fn"><a name="tryLock-2" />bool QMutex.tryLock (<i>self</i>, int&#160;<i>timeout</i>)</h3><p>This is an overloaded function.</p>
<p>Attempts to lock the mutex. This function returns true if the
lock was obtained; otherwise it returns false. If another thread
has locked the mutex, this function will wait for at most
<i>timeout</i> milliseconds for the mutex to become available.</p>
<p>Note: Passing a negative number as the <i>timeout</i> is
equivalent to calling <a href="qmutex.html#lock">lock</a>(), i.e.
this function will wait forever until mutex can be locked if
<i>timeout</i> is negative.</p>
<p>If the lock was obtained, the mutex must be unlocked with
<a href="qmutex.html#unlock">unlock</a>() before another thread can
successfully lock it.</p>
<p>Calling this function multiple times on the same mutex from the
same thread is allowed if this mutex is a <a href="qmutex.html#RecursionMode-enum">recursive mutex</a>. If this mutex
is a <a href="qmutex.html#RecursionMode-enum">non-recursive
mutex</a>, this function will <i>always</i> return false when
attempting to lock the mutex recursively.</p>
<p>See also <a href="qmutex.html#lock">lock</a>() and <a href="qmutex.html#unlock">unlock</a>().</p>


<h3 class="fn"><a name="unlock" />QMutex.unlock (<i>self</i>)</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 behavior.</p>
<p>See also <a href="qmutex.html#lock">lock</a>().</p>
<address><hr /><div align="center"><table border="0" cellspacing="0" width="100%"><tr class="address"><td align="left" width="25%">PyQt&#160;4.8.3 for X11</td><td align="center" width="50%">Copyright &#169; <a href="http://www.riverbankcomputing.com">Riverbank&#160;Computing&#160;Ltd</a> and <a href="http://www.qtsoftware.com">Nokia</a> 2011</td><td align="right" width="25%">Qt&#160;4.7.1</td></tr></table></div></address></body></html>