CThreadHelper.cpp 687 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include "CThreadHelper.h"
  2. #include <boost/thread.hpp>
  3. #include <boost/bind.hpp>
  4. CThreadHelper::CThreadHelper(std::vector<boost::function<void()> > *Tasks, int Threads)
  5. {
  6. currentTask = 0; amount = Tasks->size();
  7. tasks = Tasks;
  8. threads = Threads;
  9. }
  10. void CThreadHelper::run()
  11. {
  12. boost::thread_group grupa;
  13. for(int i=0;i<threads;i++)
  14. grupa.create_thread(boost::bind(&CThreadHelper::processTasks,this));
  15. grupa.join_all();
  16. }
  17. void CThreadHelper::processTasks()
  18. {
  19. int pom;
  20. while(true)
  21. {
  22. rtinm.lock();
  23. if((pom=currentTask) >= amount)
  24. {
  25. rtinm.unlock();
  26. break;
  27. }
  28. else
  29. {
  30. ++currentTask;
  31. rtinm.unlock();
  32. (*tasks)[pom]();
  33. }
  34. }
  35. }