ThreadPool.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:2k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ThreadPool */
  2. /* Copyright (c) 1999 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01g,03aug01,dbs  remove usage of Thread class
  7. 01f,21sep99,aim  changed API for activate
  8. 01e,20sep99,aim  added Thread name parameter
  9. 01d,13aug99,aim  added default threadPriority
  10. 01c,12aug99,aim  added queue length ctor parameter
  11. 01b,11aug99,aim  now blocks when all threads are busy
  12. 01a,29jul99,aim  created
  13. */
  14. #ifndef __INCThreadPool_h
  15. #define __INCThreadPool_h
  16. #include "TaskQueue.h"
  17. #include "Reactor.h"
  18. #include "TimeValue.h"
  19. class EventHandler;
  20. class ThreadPool : public TaskQueue<EventHandler*>
  21.     {
  22.   public:
  23.     ThreadPool
  24. (
  25. size_t thrStackSize = 0,
  26. long thrPriority  = 150
  27. );
  28.     virtual ~ThreadPool ();
  29.     virtual int close ();
  30.     
  31.     virtual int open
  32. (
  33. int maxThreads,
  34. const char* threadName = 0
  35. );
  36.     virtual int open
  37. (
  38. Reactor* reactor,
  39. int minThreads,
  40. int maxThreads,
  41. const char* threadName = 0
  42. );
  43.     // from TaskQueue
  44.     virtual void* serviceHandler ();
  45.     virtual int queueFullHandler ();
  46.     int minThreads () const;
  47.     int maxThreads () const;
  48.     int threadCount () const;
  49.     
  50.     int enqueue (EventHandler*);
  51.     class Scavenger;
  52.     friend class Scavenger;
  53.     
  54.   private:
  55.     int m_minThreads;
  56.     int m_maxThreads;
  57.     int m_threadCount;
  58.     VxMutex m_threadCountLock;
  59.     size_t m_thrStackSize;
  60.     long m_thrPriority;
  61.     Scavenger* m_thrScavenger;
  62.     char* m_thrName;
  63.     int  threadAdd ();
  64.     int  threadRemove ();
  65.     int threadReaper ();
  66.     void threadNameSet (const char* name);
  67.     void threadNameDelete ();
  68.     const char* xstrdup (char*& dst, const char* src);
  69.     
  70.     Scavenger* createScavenger
  71. (
  72. Reactor* reactor,
  73. int scavengerTimeout = 5 // sec
  74. );
  75.     ThreadPool (const ThreadPool& other);
  76.     ThreadPool& operator= (const ThreadPool& rhs);
  77.     };
  78. class ThreadPool::Scavenger : public EventHandler
  79.     {
  80.   public:
  81.     virtual ~Scavenger ();
  82.     virtual int handleTimeout (const TimeValue&);
  83.     
  84.   private:
  85.     friend class ThreadPool;
  86.     Scavenger (Reactor*, ThreadPool*);
  87.     ThreadPool* m_threadPool;
  88.     };
  89. #endif // __INCThreadPool_h