version 1.57.2.5, 2006/07/29 01:13:49
|
version 1.57.2.6, 2006/07/29 15:54:07
|
|
|
static Boolean _key_error; // l10n | static Boolean _key_error; // l10n |
}; | }; |
| |
|
|
class PEGASUS_COMMON_LINKAGE ThreadPool |
|
{ |
|
public: |
|
|
|
/** |
|
Constructs a new ThreadPool object. |
|
@param initialSize The number of threads that are initially added to |
|
the thread pool. |
|
@param key A name for this thread pool that can be used to determine |
|
equality of two thread pool objects. Only the first 16 characters |
|
of this value are used. |
|
@param minThreads The minimum number of threads that should be |
|
contained in this thread pool at any given time. |
|
@param maxThreads The maximum number of threads that should be |
|
contained in this thread pool at any given time. |
|
@param deallocateWait The minimum time that a thread should be idle |
|
before it is removed from the pool and cleaned up. |
|
*/ |
|
ThreadPool(Sint16 initialSize, |
|
const char *key, |
|
Sint16 minThreads, |
|
Sint16 maxThreads, struct timeval &deallocateWait); |
|
|
|
/** |
|
Destructs the ThreadPool object. |
|
*/ |
|
~ThreadPool(); |
|
|
|
/** |
|
Allocate and start a thread to do a unit of work. |
|
@param parm A generic parameter to pass to the thread |
|
@param work A pointer to the function that is to be executed by |
|
the thread |
|
@param blocking A pointer to an optional semaphore which, if |
|
specified, is signaled after the thread finishes |
|
executing the work function |
|
@return PEGASUS_THREAD_OK if the thread is started successfully, |
|
PEGASUS_THREAD_INSUFFICIENT_RESOURCES if the |
|
resources necessary to start the thread are not currently |
|
available. PEGASUS_THREAD_SETUP_FAILURE if the thread |
|
could not be setup properly. PEGASUS_THREAD_UNAVAILABLE |
|
if this service is shutting down and no more threads can |
|
be allocated. |
|
@exception IPCException |
|
*/ |
|
ThreadStatus allocate_and_awaken(void *parm, |
|
ThreadReturnType(PEGASUS_THREAD_CDECL * |
|
work) (void *), |
|
Semaphore * blocking = 0); |
|
|
|
/** |
|
Cleans up idle threads if they have been running longer than the |
|
deallocate_wait configuration and more than the configured |
|
minimum number of threads is running. |
|
@return The number of threads that were cleaned up. |
|
@exception IPCException |
|
*/ |
|
Uint32 cleanupIdleThreads(); |
|
|
|
void get_key(Sint8 * buf, int bufsize); |
|
|
|
inline void setMinThreads(Sint16 min) |
|
{ |
|
_minThreads = min; |
|
} |
|
|
|
inline Sint16 getMinThreads() const |
|
{ |
|
return _minThreads; |
|
} |
|
|
|
inline void setMaxThreads(Sint16 max) |
|
{ |
|
_maxThreads = max; |
|
} |
|
|
|
inline Sint16 getMaxThreads() const |
|
{ |
|
return _maxThreads; |
|
} |
|
|
|
inline Uint32 runningCount() |
|
{ |
|
return _runningThreads.size(); |
|
} |
|
|
|
inline Uint32 idleCount() |
|
{ |
|
return _idleThreads.size(); |
|
} |
|
|
|
private: |
|
|
|
ThreadPool(); // Unimplemented |
|
ThreadPool(const ThreadPool &); // Unimplemented |
|
ThreadPool & operator=(const ThreadPool &); // Unimplemented |
|
|
|
static ThreadReturnType PEGASUS_THREAD_CDECL _loop(void *); |
|
|
|
static Boolean _timeIntervalExpired(struct timeval *start, |
|
struct timeval *interval); |
|
|
|
static void _deleteSemaphore(void *p); |
|
|
|
void _cleanupThread(Thread * thread); |
|
Thread *_initializeThread(); |
|
void _addToIdleThreadsQueue(Thread * th); |
|
|
|
Sint16 _maxThreads; |
|
Sint16 _minThreads; |
|
AtomicInt _currentThreads; |
|
struct timeval _deallocateWait; |
|
char _key[17]; |
|
List < Thread, Mutex > _idleThreads; |
|
List < Thread, Mutex > _runningThreads; |
|
AtomicInt _dying; |
|
}; |
|
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
|
|
#endif // Pegasus_Thread_h | #endif // Pegasus_Thread_h |