JobManager.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "JobManager.h"
  2. //======================================================================================================================
  3. // assignNewJob =
  4. //======================================================================================================================
  5. void WorkerThread::assignNewJob(JobCallback job_, void* jobParams_)
  6. {
  7. boost::mutex::scoped_lock lock(mutex);
  8. job = job_;
  9. jobParams = jobParams_;
  10. lock.unlock();
  11. condVar.notify_one();
  12. }
  13. //======================================================================================================================
  14. // workingFunc =
  15. //======================================================================================================================
  16. void WorkerThread::workingFunc()
  17. {
  18. while(1)
  19. {
  20. // Wait for something
  21. {
  22. boost::mutex::scoped_lock lock(mutex);
  23. while(job == NULL)
  24. {
  25. condVar.wait(lock);
  26. }
  27. }
  28. // Exec
  29. job(id, jobParams);
  30. // Nullify
  31. {
  32. boost::mutex::scoped_lock lock(mutex);
  33. job = NULL;
  34. }
  35. barrier->wait();
  36. }
  37. }
  38. //======================================================================================================================
  39. // Constructor =
  40. //======================================================================================================================
  41. JobManager::JobManager(uint threadsNum):
  42. barrier(threadsNum + 1)
  43. {
  44. for(uint i = 0; i < threadsNum; i++)
  45. {
  46. workers.push_back(new WorkerThread(i, &barrier));
  47. }
  48. }