Guest User

Untitled

a guest
Jan 19th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include "ProcesoEntrada.h"
  2.  
  3. ProcesoEntrada::ProcesoEntrada(int numeroDeEntrada, Estacionamiento* estacionamiento) {
  4.     this->numeroDeEntrada = numeroDeEntrada;
  5.     this->estacionamiento = estacionamiento;
  6.  
  7.     // se registra el event handler declarado antes
  8.     SignalHandler::getInstance()->registrarHandler(SIGINT, &sigint_handler);
  9.  
  10.     srand(time(NULL));
  11. }
  12.  
  13. ProcesoEntrada::~ProcesoEntrada() {
  14.  
  15. }
  16.  
  17. void ProcesoEntrada::ejecutar() {
  18.  
  19.     while (!this->sigint_handler.getGracefulQuit()) {
  20.  
  21.         if (!this->estacionamiento->estaLLeno()) {
  22.             this->estacionamiento->tomarLockPlazas();
  23.             if (ocuparPlaza()) {
  24.                 std::cout << "Entrada " << numeroDeEntrada << ": Acabo de ocupar una plaza, hay " << this->estacionamiento->getCantidadDeAutos() << " Autos en el estacionamiento" << std::endl;
  25.             } else {
  26.                 cout << "Entrada " << this->numeroDeEntrada << ": ERROR, algo anda mal, el estacionamiento no esta lleno pero no pude ingresar " << endl;
  27.             }
  28.  
  29.             this->estacionamiento->liberarLockPlazas();
  30.         } else {
  31.             cout << "Entrada " << this->numeroDeEntrada << " Se lleno el estacionamiento" << endl;
  32.         }
  33.  
  34.         sleep(NumberUtil::getRandom(1, 3));
  35.     }
  36.  
  37.     std::cout << "Entrada: Se termino mi proceso, una lastima. Pid [" << getpid() << "]" << std::endl;
  38. }
  39.  
  40. bool ProcesoEntrada::ocuparPlaza() {
  41.  
  42.     bool resultado = false;
  43.  
  44.     int tiempo = NumberUtil::getRandom(1, 3);
  45.     this->estacionamiento->tomarLockPlazas();
  46.  
  47.     for (int i = 0; i < this->estacionamiento->getTamanio(); i++) {
  48.         if (!this->estacionamiento->getPlaza(i).getOcupado()) {
  49.             long id = NumberUtil::getRandom(RAND_MAX);
  50.             this->estacionamiento->ocuparPlaza(i, tiempo, id);
  51.             std::cout << "Entrada " << numeroDeEntrada << ": Yay! ocupe la plaza [" << i << "] id del auto [" << id << "]" << std::endl;
  52.             resultado = true;;
  53.         }
  54.     }
  55.     this->estacionamiento->liberarLockPlazas();
  56.  
  57.     return resultado;
  58. }
Add Comment
Please, Sign In to add comment