Advertisement
Guest User

Untitled

a guest
Jan 4th, 2015
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #pragma once
  2. #include<memory>
  3. #include<map>
  4.  
  5. #include<boost/bind.hpp>
  6. #include<boost/asio/io_service.hpp>
  7. #include<boost/thread.hpp>
  8.  
  9. namespace NB
  10. {
  11.  
  12. class IModule
  13. {
  14. public:
  15.     virtual void doWork() = 0;
  16. };
  17.  
  18.  
  19. class ModulableThreadPool
  20. {
  21. public:
  22.     enum ThreadModulePriority
  23.     {
  24.         TP_Lowest = 1,
  25.         TP_Low,
  26.         TP_Normal,
  27.         TP_High,
  28.         TP_Highest,
  29.     };
  30.  
  31.     typedef std::multimap<ThreadModulePriority, IModule*> ModuleList;
  32.  
  33.     ModulableThreadPool(uint32_t threads = 1);
  34.     ~ModulableThreadPool();
  35.  
  36.     void registerModule(IModule* module, ThreadModulePriority = TP_Normal);
  37.     void unregisterModule(IModule* module);
  38.  
  39. private:
  40.     boost::asio::io_service         m_ioService;
  41.     boost::thread_group             m_threadPool;
  42.     boost::asio::io_service::work   m_ioWork;
  43.  
  44.     boost::thread*                  m_schedulerThread;
  45.     void schedulerFunc();
  46.  
  47.     ModuleList                      m_registeredModules;
  48. };
  49.  
  50. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement