Projekty z kursu Systemy operacyjne 2 na PWr
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "Scene.h"
  2. #include <unistd.h>
  3. int Scene::xMax;
  4. int Scene::yMax;
  5. int Scene::points = 0;
  6. bool Scene::initialized = false;
  7. bool Scene::freezed = false;
  8. bool Scene::running = false;
  9. std::mutex Scene::ncursesMutex;
  10. std::mutex Scene::freezeMutex;
  11. std::condition_variable Scene::freezeCondition;
  12. Scene::Scene()
  13. {
  14. //ctor
  15. }
  16. Scene::~Scene()
  17. {
  18. //dtor
  19. }
  20. void Scene::init(int xRes, int yRes)
  21. {
  22. xMax = xRes;
  23. yMax = yRes;
  24. running = true;
  25. initialized = true;
  26. }
  27. int Scene::getPoints()
  28. {
  29. return points;
  30. }
  31. bool Scene::isFreezed()
  32. {
  33. return freezed;
  34. }
  35. void Scene::freeze()
  36. {
  37. const int idleSeconds = 10;
  38. std::unique_lock<std::mutex> freezeLock(freezeMutex);
  39. freezed = true;
  40. sleep(idleSeconds);
  41. // // This must be interruptable, so it can't be just sleep(idleSeconds)
  42. // for(int i = 0; i < idleSeconds * 10; i++)
  43. // {
  44. // if(running)
  45. // {
  46. // // Every tick = 100 ms
  47. // usleep(100000);
  48. // }
  49. // else
  50. // {
  51. // break;
  52. // }
  53. // }
  54. freezed = false;
  55. freezeCondition.notify_all();
  56. }
  57. void Scene::terminateAll()
  58. {
  59. Scene::running = false;
  60. }