+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Name: semaphore.tex
+%% Purpose: wxSemaphore documentation
+%% Author: Vadim Zeitlin
+%% Modified by:
+%% Created: 02.04.02
+%% RCS-ID: $Id$
+%% Copyright: (c) 2002 Vadim Zeitlin
+%% License: wxWindows license
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{\class{wxSemaphore}}\label{wxsemaphore}
+
+wxSemaphore is a counter limiting the number of threads concurrently accessing
+a shared resource. This counter is always between $0$ and the maximum value
+specified during the semaphore creation. When the counter is strictly greater
+than $0$, a call to \helpref{Wait}{wxsemaphorewait} returns immediately and
+decrements the counter. As soon as it reaches $0$, any subsequent calls to
+\helpref{Wait}{wxsemaphorewait} block and only return when the semaphore
+counter becomes strictly positive again as the result of calling
+\helpref{Post}{wxsemaphorepost} which increments the counter.
+
+In general, the semaphores are useful to restict access to a shared resource
+which can only be accessed by some fixed number of clients at once. For
+example, when modeling a hotel reservation system a semaphore with the counter
+equal to the total number of available rooms could be created. Each time a room
+is reserved, the semaphore should be acquired by calling
+\helpref{Wait}{wxsemaphorewait} and each time a room is freed it should be
+released by calling \helpref{Post}{wxsemaphorepost}.
+
+\wxheading{Derived from}
+
+No base class
+
+\wxheading{Include files}
+
+<wx/thread.h>
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxSemaphore::wxSemaphore}\label{wxsemaphorewxsemaphore}
+
+\func{}{wxSemaphore}{\param{int }{initialcount = 0}, \param{int }{maxcount = 0}}
+
+Specifying a {\it maxcount} of $0$ actually makes wxSemaphore behave as if
+there is no upper limit. If maxcount is $1$ the semaphore behaves exactly as a
+mutex.
+
+{\it initialcount} is the initial value of the semaphore which must be between
+$0$ and {\it maxcount} (if it is not set to $0$).
+
+\membersection{wxSemaphore::\destruct{wxSemaphore}}\label{wxsemaphoredtor}
+
+\func{}{\destruct{wxSemaphore}}{\void}
+
+Destructor is not virtual, don't use this class polymorphically.
+
+\membersection{wxSemaphore::Post}\label{wxsemaphorepost}
+
+\func{void}{Post}{\void}
+
+Increments the semaphore count and signals one of the waiting threads in an
+atomic way.
+
+\membersection{wxSemaphore::TryWait}\label{wxsemaphoretrywait}
+
+\func{bool}{TryWait}{\void}
+
+Same as \helpref{Wait()}{wxsemaphorewait}, but does not block, returns
+{\tt TRUE} if the semaphore was successfully acquired and {\tt FALSE} if the
+count is zero and it couldn't be done.
+
+\membersection{wxSemaphore::Wait}\label{wxsemaphorewait}
+
+\func{void}{Wait}{\void}
+
+Wait indefinitely until the semaphore count becomes strictly positive
+and then decrement it and return.
+
+\func{bool}{Wait}{\param{unsigned long }{timeout\_millis}}
+
+Same as the version above, but with a timeout limit: returns {\tt TRUE| if the
+semaphore was acquired and {\tt FALSE} if the timeout has ellapsed
+