wxWidgets: wxSemaphore Class Reference

| Version: 3.0.4

Public Member Functions | List of all members
wxSemaphore Class Reference
Class List by Category » Threading

`#include </usr/src/ports/wxWidgets3.0/wxWidgets3.0-3.0.4-1.i686/src/wxWidgets-3.0.4/interface/wx/thread.h>`

## Detailed Description

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 wxSemaphore::Wait() returns immediately and decrements the counter. As soon as it reaches 0, any subsequent calls to wxSemaphore::Wait block and only return when the semaphore counter becomes strictly positive again as the result of calling wxSemaphore::Post which increments the counter.

In general, semaphores are useful to restrict access to a shared resource which can only be accessed by some fixed number of clients at the same time. 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 wxSemaphore::Wait and each time a room is freed it should be released by calling wxSemaphore::Post.

##

Library: wxBase

<>< =''>:</>&;&;< =''>\ </></>

## Public Member Functions
| wxSemaphore (int initialcount=0, int maxcount=0)
| Specifying a maxcount of 0 actually makes wxSemaphore behave as if there is no upper limit. More...
| ~wxSemaphore ()
| Destructor is not virtual, don't use this class polymorphically. More...
wxSemaError | Post ()
| Increments the semaphore count and signals one of the waiting threads in an atomic way. More...
wxSemaError | TryWait ()
| Same as Wait(), but returns immediately. More...
wxSemaError | Wait ()
| Wait indefinitely until the semaphore count becomes strictly positive and then decrement it and return. More...
wxSemaError | WaitTimeout (unsigned long timeout_millis)
| Same as Wait(), but with a timeout limit. More...

## Constructor & Destructor Documentation

## ◆ wxSemaphore()

wxSemaphore::wxSemaphore | ( | int | initialcount = `0`,
|  | int | maxcount = `0`
| ) |  |

Specifying a maxcount of 0 actually makes wxSemaphore behave as if there is no upper limit.

If maxcount is 1, the semaphore behaves almost as a mutex (but unlike a mutex it can be released by a thread different from the one which acquired it).

initialcount is the initial value of the semaphore which must be between 0 and maxcount (if it is not set to 0).

## ◆ ~wxSemaphore()

wxSemaphore::~wxSemaphore | ( |  | ) |

Destructor is not virtual, don't use this class polymorphically.

## Member Function Documentation

## ◆ Post()

wxSemaError wxSemaphore::Post | ( |  | ) |

Increments the semaphore count and signals one of the waiting threads in an atomic way.

Returns wxSEMA_OVERFLOW if the count would increase the counter past the maximum.

Returns
  One of:
  - wxSEMA_NO_ERROR: There was no error.
  - wxSEMA_INVALID : Semaphore hasn't been initialized successfully.
  - wxSEMA_OVERFLOW: Post() would increase counter past the max.
  - wxSEMA_MISC_ERROR: Miscellaneous error.

## ◆ TryWait()

wxSemaError wxSemaphore::TryWait | ( |  | ) |

Same as Wait(), but returns immediately.

Returns
  One of:
  - wxSEMA_NO_ERROR: There was no error.
  - wxSEMA_INVALID: Semaphore hasn't been initialized successfully.
  - wxSEMA_BUSY: Returned by TryWait() if Wait() would block, i.e. the count is zero.
  - wxSEMA_MISC_ERROR: Miscellaneous error.

## ◆ Wait()

wxSemaError wxSemaphore::Wait | ( |  | ) |

Wait indefinitely until the semaphore count becomes strictly positive and then decrement it and return.

Returns
  One of:
  - wxSEMA_NO_ERROR: There was no error.
  - wxSEMA_INVALID: Semaphore hasn't been initialized successfully.
  - wxSEMA_MISC_ERROR: Miscellaneous error.

## ◆ WaitTimeout()

wxSemaError wxSemaphore::WaitTimeout | ( | unsigned long | timeout_millis | ) |

Same as Wait(), but with a timeout limit.

Returns
  One of:
  - wxSEMA_NO_ERROR: There was no error.
  - wxSEMA_INVALID: Semaphore hasn't been initialized successfully.
  - wxSEMA_TIMEOUT: Timeout occurred without receiving semaphore.
  - wxSEMA_MISC_ERROR: Miscellaneous error.