highlighter application  1.1
HCE project utils : highlighter
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
ComponentManager.hpp
Go to the documentation of this file.
1 #ifndef COMPONENT_MANAGER_HPP
2 #define COMPONENT_MANAGER_HPP
3 
4 #include <Poco/SharedPtr.h>
5 #include <Poco/Condition.h>
6 #include <Poco/Mutex.h>
7 #include <Poco/Runnable.h>
8 #include <Poco/TaskManager.h>
9 #include <Poco/Thread.h>
10 #include <Poco/ThreadPool.h>
11 #include <queue>
12 #include <vector>
13 
14 #include "ComponentBase.hpp"
15 #include "TaskWaitObject.hpp"
16 
17 namespace HCE
18 {
19  namespace component
20  {
21  class ComponentManager : public Poco::Runnable
22  {
23  protected:
24  Poco::SharedPtr<ComponentBase> getFreeComponent();
25  protected:
26  bool exitFlag;
27  std::vector<Poco::SharedPtr<ComponentBase> > componentsList;
28  Poco::Thread ownThread;
29  Poco::SharedPtr<Poco::TaskManager> _taskManager;
30  Poco::FastMutex insertComponentMutex;
31  Poco::FastMutex componentMutex;
32  Poco::FastMutex incomeDataMutex;
33  Poco::Condition conditionVar;
34  std::queue<Poco::SharedPtr<TaskWaitObject> > taskQueue;
35  Poco::SharedPtr<Poco::ThreadPool> _threadPool;
36  public:
38  void addComponent(Poco::SharedPtr<ComponentBase> componentPtr);
39  void setTaskManager(Poco::SharedPtr<Poco::TaskManager> taskManager);
40  void addTask(Poco::SharedPtr<TaskWaitObject> task);
41  void setThreadPool(Poco::SharedPtr<Poco::ThreadPool> threadPool) {_threadPool = threadPool;}
42  void clearTaskQueue();
43  void start();
44  void stop();
45  void join() {ownThread.join();}
46  bool isRunning() {return ownThread.isRunning();}
47  virtual void run();
48  virtual ~ComponentManager() {}
49  };
50  }
51 }
52 
53 
54 #endif