diff options
author | Alan Conway <aconway@apache.org> | 2006-10-31 19:53:55 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2006-10-31 19:53:55 +0000 |
commit | 9094d2b10ecadd66fa3b22169183e7573cc79629 (patch) | |
tree | bf3915f72be2a5f09932b800d2fa4309fb3ad64e /cpp/src/qpid/concurrent/ThreadPool.h | |
parent | 0487ea40bc6568765cdec75a36273eeb26fae854 (diff) | |
download | qpid-python-9094d2b10ecadd66fa3b22169183e7573cc79629.tar.gz |
IO refactor phase 1. Reduced dependencies, removed redundant classes.
Renamed pricipal APR classes in preparation for move to apr namespace.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@469625 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/concurrent/ThreadPool.h')
-rw-r--r-- | cpp/src/qpid/concurrent/ThreadPool.h | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/cpp/src/qpid/concurrent/ThreadPool.h b/cpp/src/qpid/concurrent/ThreadPool.h index 925faa76de..11f0cc364f 100644 --- a/cpp/src/qpid/concurrent/ThreadPool.h +++ b/cpp/src/qpid/concurrent/ThreadPool.h @@ -18,7 +18,12 @@ #ifndef _ThreadPool_ #define _ThreadPool_ +#include <queue> +#include <vector> +#include "qpid/concurrent/Monitor.h" #include "qpid/concurrent/Thread.h" +#include "qpid/concurrent/ThreadFactory.h" +#include "qpid/concurrent/ThreadPool.h" #include "qpid/concurrent/Runnable.h" namespace qpid { @@ -26,11 +31,33 @@ namespace concurrent { class ThreadPool { + class Worker : public virtual Runnable{ + ThreadPool* pool; + public: + inline Worker(ThreadPool* _pool) : pool(_pool){} + inline virtual void run(){ + while(pool->running){ + pool->runTask(); + } + } + }; + const bool deleteFactory; + const int size; + ThreadFactory* factory; + Monitor lock; + std::vector<Thread*> threads; + std::queue<Runnable*> tasks; + Worker* worker; + volatile bool running; + + void runTask(); public: - virtual void start() = 0; - virtual void stop() = 0; - virtual void addTask(Runnable* runnable) = 0; - virtual ~ThreadPool(){} + ThreadPool(int size); + ThreadPool(int size, ThreadFactory* factory); + virtual void start(); + virtual void stop(); + virtual void addTask(Runnable* task); + virtual ~ThreadPool(); }; } |