<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/espenr/tmp/qt - 3.3.8 - espenr - 2499/qt - x11 - free - 3.3.8/src/tools/qsemaphore.cpp:45 -->
< html >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=ISO-8859-1" >
< title > TQSemaphore Class< / title >
< style type = "text/css" > < ! - -
fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; }
-->< / style >
< / head >
< body >
< table border = "0" cellpadding = "0" cellspacing = "0" width = "100%" >
< tr bgcolor = "#E5E5E5" >
< td valign = center >
< a href = "index.html" >
< font color = "#004faf" > Home< / font > < / a >
| < a href = "classes.html" >
< font color = "#004faf" > All Classes< / font > < / a >
| < a href = "mainclasses.html" >
< font color = "#004faf" > Main Classes< / font > < / a >
| < a href = "annotated.html" >
< font color = "#004faf" > Annotated< / font > < / a >
| < a href = "groups.html" >
< font color = "#004faf" > Grouped Classes< / font > < / a >
| < a href = "functions.html" >
< font color = "#004faf" > Functions< / font > < / a >
< / td >
< td align = "right" valign = "center" > < img src = "logo32.png" align = "right" width = "64" height = "32" border = "0" > < / td > < / tr > < / table > < h1 align = center > TQSemaphore Class Reference< / h1 >
< p > The TQSemaphore class provides a robust integer semaphore.
< a href = "#details" > More...< / a >
< p > All the functions in this class are < a href = "threads.html#threadsafe" > thread-safe< / a > when TQt is built with thread support.< / p >
< p > < tt > #include < < a href = "qsemaphore-h.html" > ntqsemaphore.h< / a > > < / tt >
< p > < a href = "qsemaphore-members.html" > List of all member functions.< / a >
< h2 > Public Members< / h2 >
< ul >
< li class = fn > < a href = "#TQSemaphore" > < b > TQSemaphore< / b > < / a > ( int maxcount )< / li >
< li class = fn > virtual < a href = "#~TQSemaphore" > < b > ~TQSemaphore< / b > < / a > ()< / li >
< li class = fn > int < a href = "#available" > < b > available< / b > < / a > () const< / li >
< li class = fn > int < a href = "#total" > < b > total< / b > < / a > () const< / li >
< li class = fn > int < a href = "#operator++" > < b > operator++< / b > < / a > ( int )< / li >
< li class = fn > int < a href = "#operator--" > < b > operator--< / b > < / a > ( int )< / li >
< li class = fn > int < a href = "#operator+-eq" > < b > operator+=< / b > < / a > ( int n )< / li >
< li class = fn > int < a href = "#operator--eq" > < b > operator-=< / b > < / a > ( int n )< / li >
< li class = fn > bool < a href = "#tryAccess" > < b > tryAccess< / b > < / a > ( int n )< / li >
< / ul >
< hr > < a name = "details" > < / a > < h2 > Detailed Description< / h2 >
The TQSemaphore class provides a robust integer semaphore.
< p >
< p > A TQSemaphore can be used to serialize thread execution, in a
similar way to a < a href = "ntqmutex.html" > TQMutex< / a > . A semaphore differs from a mutex, in
that a semaphore can be accessed by more than one thread at a
time.
< p > For example, suppose we have an application that stores data in a
large tree structure. The application creates 10 threads
(commonly called a thread pool) to perform searches on the tree.
When the application searches the tree for some piece of data, it
uses one thread per base node to do the searching. A semaphore
could be used to make sure that two threads don't try to search
the same branch of the tree at the same time.
< p > A non-computing example of a semaphore would be dining at a
restuarant. A semaphore is initialized to have a maximum count
equal to the number of chairs in the restuarant. As people
arrive, they want a seat. As seats are filled, the semaphore is
accessed, once per person. As people leave, the access is
released, allowing more people to enter. If a party of 10 people
want to be seated, but there are only 9 seats, those 10 people
will wait, but a party of 4 people would be seated (taking the
available seats to 5, making the party of 10 people wait longer).
< p > When a semaphore is created it is given a number which is the
maximum number of concurrent accesses it will permit. Accesses to
the sempahore are gained using < a href = "#operator++" > operator++< / a > () or < a href = "#operator+-eq" > operator+=< / a > (), and
released with < a href = "#operator--" > operator--< / a > () or < a href = "#operator--eq" > operator-=< / a > (). The number of
accesses allowed is retrieved with < a href = "#available" > available< / a > (), and the total
number with < a href = "#total" > total< / a > (). Note that the incrementing functions will
block if there aren't enough available accesses. Use < a href = "#tryAccess" > tryAccess< / a > ()
if you want to acquire accesses without blocking.
< p > See also < a href = "environment.html" > Environment Classes< / a > and < a href = "thread.html" > Threading< / a > .
< hr > < h2 > Member Function Documentation< / h2 >
< h3 class = fn > < a name = "TQSemaphore" > < / a > TQSemaphore::TQSemaphore ( int maxcount )
< / h3 >
Creates a new semaphore. The semaphore can be concurrently
accessed at most < em > maxcount< / em > times.
< h3 class = fn > < a name = "~TQSemaphore" > < / a > TQSemaphore::~TQSemaphore ()< tt > [virtual]< / tt >
< / h3 >
Destroys the semaphore.
< p > < b > Warning:< / b > If you destroy a semaphore that has accesses in use the
resultant behavior is undefined.
< h3 class = fn > int < a name = "available" > < / a > TQSemaphore::available () const
< / h3 >
Returns the number of accesses currently available to the
semaphore.
< h3 class = fn > int < a name = "operator++" > < / a > TQSemaphore::operator++ ( int )
< / h3 >
Postfix ++ operator.
< p > Try to get access to the semaphore. If < a href = "#available" > available< / a > () == 0, this
call will block until it can get access, i.e. until < a href = "#available" > available< / a > () >
0.
< h3 class = fn > int < a name = "operator+-eq" > < / a > TQSemaphore::operator+= ( int n )
< / h3 >
Try to get access to the semaphore. If < a href = "#available" > available< / a > () < < em > n< / em > , this
call will block until it can get all the accesses it wants, i.e.
until < a href = "#available" > available< / a > () > = < em > n< / em > .
< h3 class = fn > int < a name = "operator--" > < / a > TQSemaphore::operator-- ( int )
< / h3 >
Postfix -- operator.
< p > Release access of the semaphore. This wakes all threads waiting
for access to the semaphore.
< h3 class = fn > int < a name = "operator--eq" > < / a > TQSemaphore::operator-= ( int n )
< / h3 >
Release < em > n< / em > accesses to the semaphore.
< h3 class = fn > int < a name = "total" > < / a > TQSemaphore::total () const
< / h3 >
Returns the total number of accesses to the semaphore.
< h3 class = fn > bool < a name = "tryAccess" > < / a > TQSemaphore::tryAccess ( int n )
< / h3 >
Try to get access to the semaphore. If < a href = "#available" > available< / a > () < < em > n< / em > , this
function will return FALSE immediately. If < a href = "#available" > available< / a > () > = < em > n< / em > ,
this function will take < em > n< / em > accesses and return TRUE. This
function does < em > not< / em > block.
<!-- eof -->
< hr > < p >
This file is part of the < a href = "index.html" > TQt toolkit< / a > .
Copyright © 1995-2007
< 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 © 2007
< a href = "troll.html" > Trolltech< / a > < td align = center > < a href = "trademarks.html" > Trademarks< / a >
< td align = right > < div align = right > TQt 3.3.8< / div >
< / table > < / div > < / address > < / body >
< / html >