|
| RWServerPool () |
|
| RWServerPool (const RWServerPool &second) |
|
| ~RWServerPool () |
|
RWThreadAttribute | getPoolAttribute () |
|
RWServerPool & | operator= (const RWServerPool &second) |
|
void | resize (size_t size) |
|
void | setPoolAttribute (const RWThreadAttribute &poolThreadsAttr) |
|
size_t | size () const |
|
| RWRunnableServer () |
|
| RWRunnableServer (const RWRunnableServer &second) |
|
| ~RWRunnableServer () |
|
void | checkGuards () |
|
void | enqueue (const RWRunnable &runnable) |
|
RWWaitStatus | enqueue (const RWRunnable &runnable, unsigned long milliseconds) |
|
void | enqueue (const RWRunnable &runnable, const RWRunnableGuard &guard) |
|
RWWaitStatus | enqueue (const RWRunnable &runnable, const RWRunnableGuard &guard, unsigned long milliseconds) |
|
void | enqueue (long priority, const RWRunnable &runnable) |
|
RWWaitStatus | enqueue (long priority, const RWRunnable &runnable, unsigned long milliseconds) |
|
void | enqueue (long priority, const RWRunnable &runnable, const RWRunnableGuard &guard) |
|
RWWaitStatus | enqueue (long priority, const RWRunnable &runnable, const RWRunnableGuard &guard, unsigned long milliseconds) |
|
size_t | getCapacity () const |
|
RWRunnableServer & | operator= (const RWRunnableServer &second) |
|
size_t | setCapacity (size_t maxCapacity) |
|
void | stop () |
|
| RWThread () |
|
| RWThread (RWStaticCtor) |
|
| RWThread (const RWThread &second) |
|
| ~RWThread () |
|
bool | canGetPriority () const |
|
bool | canGetProcessScopePriority () const |
|
bool | canGetSchedulingPolicy () const |
|
bool | canGetSystemScopePriority () const |
|
bool | canGetTimeSliceQuantum () const |
|
bool | canSetPriority () const |
|
bool | canSetProcessScopePriority () const |
|
bool | canSetSchedulingPolicy (RWSchedulingPolicy policy) const |
|
bool | canSetSystemScopePriority () const |
|
bool | canSetTimeSliceQuantum () const |
|
RWThreadAttribute | getActiveAttribute () const |
|
RWThreadAttribute | getAttribute () const |
|
RWPriority | getMaxPriority () const |
|
RWPriority | getMaxProcessScopePriority () const |
|
RWPriority | getMaxSystemScopePriority () const |
|
unsigned long | getMaxTimeSliceQuantum () const |
|
RWPriority | getMinPriority () const |
|
RWPriority | getMinProcessScopePriority () const |
|
RWPriority | getMinSystemScopePriority () const |
|
unsigned long | getMinTimeSliceQuantum () const |
|
RWPriority | getPriority () const |
|
RWPriority | getProcessScopePriority () const |
|
RWThreadSelf | getRWThreadSelf () const |
|
RWSchedulingPolicy | getSchedulingPolicy () const |
|
unsigned | getSuspendCount () const |
|
RWPriority | getSystemScopePriority () const |
|
unsigned long | getTimeSliceQuantum () const |
|
RWThread & | operator= (const RWThread &second) |
|
unsigned | resume () |
|
void | setAttribute (const RWThreadAttribute &second) |
|
void | setPriority (RWPriority priority) |
|
void | setProcessScopePriority (RWPriority priority) |
|
void | setSchedulingPolicy (RWSchedulingPolicy policy) |
|
void | setSystemScopePriority (RWPriority priority) |
|
void | setTimeSliceQuantum (unsigned long milliseconds) |
|
unsigned | suspend () |
|
void | terminate () |
|
| RWRunnable () |
|
| RWRunnable (RWStaticCtor) |
|
| RWRunnable (const RWRunnable &second) |
|
| ~RWRunnable () |
|
RWRunnable | getNestedRunnable () const |
|
RWRunnableSelf | getRWRunnableSelf () const |
|
void | join (void) |
|
RWWaitStatus | join (unsigned long milliseconds) |
|
RWRunnable & | operator= (const RWRunnable &second) |
|
void | raise () const |
|
void | releaseInterrupt () |
|
RWWaitStatus | requestCancellation () |
|
RWWaitStatus | requestCancellation (unsigned long milliseconds) |
|
RWWaitStatus | requestInterrupt () |
|
RWWaitStatus | requestInterrupt (unsigned long milliseconds) |
|
RWCompletionState | start () |
|
RWExecutionState | wait (unsigned long stateMask) |
|
RWWaitStatus | wait (unsigned long stateMask, RWExecutionState *state, unsigned long milliseconds) |
|
Public Member Functions inherited from RWRunnableHandle |
void | addCallback (const RWTFunctor< void(const RWRunnable &, RWExecutionState)> &functor, unsigned long stateMask, RWCallbackScope scope=RW_CALL_REPEATEDLY) |
|
RWCompletionState | getCompletionState () const |
|
RWExecutionState | getExecutionState () const |
|
bool | isInterruptRequested () const |
|
bool | isSelf () const |
|
bool | isSelf (const RWThreadId &id) const |
|
void | removeCallback (const RWTFunctor< void(const RWRunnable &, RWExecutionState)> &functor) |
|
RWThreadId | threadId () const |
|
Public Member Functions inherited from RWHandleBase |
bool | isValid (void) const |
|
bool | operator!= (const RWHandleBase &second) const |
|
bool | operator< (const RWHandleBase &second) const |
|
bool | operator== (const RWHandleBase &second) const |
|
The RWServerPool object is an RWRunnableServer that manages a "pool" of other RWRunnableServer instances that are used to start runnable objects submitted for execution by other threads. A server pool object, when started, waits for other threads to enqueue runnable objects for execution. Each runnable object that the server finds in its internal queue is dequeued and passed to the next available runnable server from the pool. This process continues until the server pool object is interrupted, canceled, or stopped.
Runnables may be enqueued with a guard functor, or a priority value, or both.
The guard functor is used by the server to determine whether the associated runnable is currently eligible for retrieval and execution. A guarded runnable is not retrieved by the server until that runnable is the first runnable in the queue whose guard evaluates to true
. Using guards to block runnable execution is important when implementing active objects; guards can be used to ensure that the active object maintains consistent state and preserves any necessary invariants.
The priority value is used during write operations to determine a runnable's insertion point within the server's input queue, such that the set of unprocessed and eligible runnables are retrieved in priority order by the server.
The number of runnable servers to create for the internal pool may be specified when the server pool instance is created. A server pool instance does not create the RWRunnableServer instances for the pool, and does not process any enqueued runnables until the start() member is called. No runnables may be enqueued until the server pool is started.
The size of the runnable server pool may be adjusted after construction using the resize() member.
The stop() member is used to initiate server pool shutdown. The server pool continues to dispatch any runnables already enqueued when stop() is called, but no additional runnables may be enqueued after that point. Once the pending runnables have been dispatched, the server pool thread stops and joins with the runnable servers in the pool and then exits. The stop function does not wait for the server to stop; to wait for the server pool thread to complete its shutdown exit, use the join() function.
The RWRunnable::requestCancellation() function should be used if the server thread is to stop execution as soon as possible without dequeuing and dispatching any additional runnables.
The RWRunnable::requestInterrupt() function can be used to temporarily suspend execution of the server thread.
- Example
#include <rw/thread/RWServerPool.h>
#include <rw/thread/RWRunnable.h>
serverPool.start();
serverPool.enqueue(runnable);
serverPool.stop();
serverPool.join();
- See also
- RWRunnable, RWThread, RWRunnableServer, RWThreadAttribute