BDE 4.14.0 Production release
|
#include <bdlmt_threadmultiplexor.h>
Public Types | |
typedef bsl::function< void()> | Job |
A callback of this type may be passed to the processJob method. | |
Public Member Functions | |
BSLMF_NESTED_TRAIT_DECLARATION (ThreadMultiplexor, bslma::UsesBslmaAllocator) | |
ThreadMultiplexor (int maxProcessors, int maxQueueSize, bslma::Allocator *basicAllocator=0) | |
~ThreadMultiplexor () | |
Destroy this thread multiplexor object. | |
template<class t_JOBTYPE > | |
int | processJob (const t_JOBTYPE &job) |
int | maxProcessors () const |
Return the maximum number of active processors. | |
int | numProcessors () const |
Return the current number of active processors. | |
This class provides a mechanism for facilitating the use of multiple threads to perform various user-defined functions ("jobs") when some degree of collaboration between threads is required. The thread multiplexor is configured with a total number of "processors", representing the number of threads that may process jobs at any particular time. Additional threads enqueue jobs to a pending job queue, which is processed by the next available processing thread.
typedef bsl::function<void()> bdlmt::ThreadMultiplexor::Job |
bdlmt::ThreadMultiplexor::ThreadMultiplexor | ( | int | maxProcessors, |
int | maxQueueSize, | ||
bslma::Allocator * | basicAllocator = 0 |
||
) |
Create a thread multiplexor which uses, at most, the specified maxProcessors
number of threads to process user-specified jobs, identified as callbacks of type Job
. Jobs that cannot be processed immediately are placed on a queue having the specified maxQueueSize
to be processed by the next free thread. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used. The behavior is undefined unless 0 < maxProcessors
and 0 < maxQueueSize
.
bdlmt::ThreadMultiplexor::~ThreadMultiplexor | ( | ) |
bdlmt::ThreadMultiplexor::BSLMF_NESTED_TRAIT_DECLARATION | ( | ThreadMultiplexor | , |
bslma::UsesBslmaAllocator | |||
) |
|
inline |
|
inline |
|
inline |
Process the specified job
functor in the calling thread if the current number of processors is less than the maximum number of processors. Otherwise, enqueue job
to the pending job queue. Return 0 on success, and a non-zero value otherwise. Note that the only requirements on t_JOBTYPE
are that it defines operator()
, having a void
return type, and that it defines a copy constructor.