(file) Return to Thread.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/Thread.h between version 1.57.2.5 and 1.57.2.6

version 1.57.2.5, 2006/07/29 01:13:49 version 1.57.2.6, 2006/07/29 15:54:07
Line 481 
Line 481 
     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


Legend:
Removed from v.1.57.2.5  
changed lines
  Added in v.1.57.2.6

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2