Advertisement
Guest User

Petter stuff

a guest
Oct 23rd, 2014
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "Task.h"
  3.  
  4. namespace rcr {
  5.  
  6. TaskMgr::TaskMgr() {
  7.  
  8. int numCPUs = Thread::GetCPUCount();
  9. for (int i = 0; i < numCPUs; i++) {
  10. WorkerThread* newThread = new WorkerThread();
  11. newThread->m_taskMgr = this;
  12. m_apxThreads.Add(newThread);
  13. }
  14.  
  15. }
  16.  
  17. TaskMgr::~TaskMgr() {
  18. Stop();
  19.  
  20. while (m_apxTodo.GetSize()>0) {
  21. m_apxTodo.Delete(0);
  22. }
  23. while (m_apxThreads.GetSize() > 0) {
  24. m_apxThreads.Delete(0);
  25. }
  26. }
  27.  
  28. void TaskMgr::Start() {
  29. for (int i = 0; i < m_apxThreads.GetSize(); i++) {
  30. m_apxThreads[i]->RunMultiThreaded();
  31. }
  32. }
  33.  
  34. void TaskMgr::Stop() {
  35. for (int i = 0; i < m_apxThreads.GetSize(); i++) {
  36. m_apxThreads[i]->Quit(true);
  37. }
  38. }
  39.  
  40. rcr::TaskPtr TaskMgr::Add(TaskPtr p_taskPtr) {
  41. //Add: Lock->Add.>Unlock->Signal
  42.  
  43. m_lock.Lock();
  44. m_apxTodo.Add(p_taskPtr);
  45. m_lock.Unlock();
  46. m_signal.Signal();
  47.  
  48. return p_taskPtr;
  49. }
  50.  
  51.  
  52. TaskMgr::WorkerThread::WorkerThread() {
  53.  
  54. }
  55.  
  56. TaskMgr::WorkerThread::~WorkerThread() {
  57.  
  58. }
  59.  
  60. void TaskMgr::WorkerThread::Run() {
  61.  
  62. //WT: Lock->Get->Unlock HaveWork: TaskRun NoWork: WaitSignal
  63.  
  64. while (!this->isQuitting()){
  65.  
  66. if (m_taskMgr->m_signal.Wait()) {
  67. m_taskMgr->m_lock.Lock();
  68. TaskPtr cTask = m_taskMgr->m_apxTodo[m_taskMgr->m_apxTodo.GetSize()-1];
  69. m_taskMgr->m_apxTodo.Delete(m_taskMgr->m_apxTodo.GetSize()-1);
  70. m_taskMgr->m_lock.Unlock();
  71.  
  72. cTask->Run();
  73. //delete cTask;
  74. }
  75.  
  76. }
  77. }
  78.  
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement