Concurrent.cpp 898 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "pch.h"
  2. #include "Concurrent.h"
  3. #include <QDebug>
  4. Concurrent::Concurrent()
  5. {
  6. }
  7. Concurrent::~Concurrent()
  8. {
  9. reset();
  10. }
  11. void Concurrent::start()
  12. {
  13. qDebug() << "Hello Start";
  14. if (thread != nullptr) reset();
  15. qDebug() << "Start after reset";
  16. thread = new std::thread(&Concurrent::run, this);
  17. qDebug() << "Start end";
  18. }
  19. void Concurrent::pause()
  20. {
  21. paused = !paused;
  22. cv.notify_one();
  23. }
  24. void Concurrent::reset()
  25. {
  26. qDebug() << "Hello Reset";
  27. cancel = true;
  28. paused = false;
  29. cv.notify_one();
  30. if (thread != nullptr) {
  31. thread->join();
  32. delete thread;
  33. thread = nullptr;
  34. }
  35. cancel = false;
  36. }
  37. void Concurrent::run()
  38. {
  39. for (;false;) {
  40. checkPaused();
  41. if (checkCancel()) { break; }
  42. }
  43. }
  44. bool Concurrent::checkCancel()
  45. {
  46. return cancel;
  47. }
  48. void Concurrent::checkPaused()
  49. {
  50. std::unique_lock<std::mutex> lck(mutex);
  51. while (paused) {
  52. qDebug() << "while";
  53. cv.wait(lck);
  54. }
  55. }