Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

multitasking.cpp 861B

123456789101112131415161718192021222324252627
  1. // multitasking.cpp
  2. // Copyright 2015 MicroNeil Research Corporation
  3. #include "multitasking.hpp"
  4. void MultiTasker::processBatch(size_t n, MultiTaskQueue& q, bool StopOnWait) {
  5. size_t batchSize = n;
  6. while(batchSize--) {
  7. MultiTask& t = q.get();
  8. switch(t.task()) {
  9. case Running: { working.put(t); break; }
  10. case Waiting: { waiting.put(t); if(StopOnWait) return; break; }
  11. case Finished: { finished.put(t); break; }
  12. }
  13. }
  14. }
  15. MultiTaskState MultiTasker::task() {
  16. size_t workingBatchSize = working.size();
  17. size_t waitingBatchSize = waiting.size();
  18. processBatch(workingBatchSize, working);
  19. processBatch(waitingBatchSize, waiting, true);
  20. if(false == working.empty()) { return Running; }
  21. else if (false == waiting.empty()) { return Waiting; }
  22. else { return Finished; }
  23. }