Sensores

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar


Código nodemcu esp8266-12e

  1. f u ck

TAREFA 6

  1. Adaptar o código de tratamento de uma fila MM1 simples, conforme colocado no slide para um formato de um simulador de eventos discretos com filas. Use o código abaixo como apoio.


<br  />//Basead em http://stdcxx.apache.org/doc/stdlibug/2-2.html#225


#include <queue><br  />#include <iostream><br  />#include <cstdlib>


//==================================================================<br  />// classes evento e simulação - base para o desenvolvimento da simulação<br  />//==================================================================


class event {<br  />public:<br  />  // Construct sets time of event.<br  />  event (double t) : time (t)<br  />    { }


  // Execute event by invoking this method.<br  />  virtual void processEvent () = 0;


  const double time;<br  />};<br  />class simulation {<br  />public:<br  />  simulation () : simtime (0), eventQueue () <br  />    {}<br  />  void run ();<br  />  void  scheduleEvent (event * newEvent) {<br  />    eventQueue.push (newEvent);<br  />  }<br  />  double simtime;<br  />protected:<br  />  class eventComparator {<br  />    public:<br  />    bool operator() (const event * left, const event * right) const {<br  />      return left->time > right->time;<br  />    }<br  />  };<br  />  std::priority_queue<event*,<br  />                      std::vector<event *, std::allocator<event*> >,<br  />                      eventComparator> eventQueue;  //fila de eventos <br  />};


void simulation::run () {


  while (! eventQueue.empty ()) { //enquanto exisitr eventos na fila de eventos


    event * nextEvent = eventQueue.top (); //captura evento no topo da fila<br  />    eventQueue.pop ();  //retira evento da fila<br  />    simtime = nextEvent->time;  //ajusta tempo de simulação<br  />    nextEvent->processEvent ();  //processa evento<br  />    delete nextEvent;  //remove evento<br  />  }<br  />}


//===================================================================<br  />//Customização dos eventos e do simulador<br  />//===================================================================


class standardArrival : public event {<br  />public:<br  />  standardArrival (double t)<br  />    : event (t)<br  />    { }<br  />  virtual void processEvent ();<br  />};


void standardArrival::processEvent () {<br  />  std::cout << "processando evento no tempo " << time  << '\n';<br  />}


class simuladorFilas : public simulation {<br  />public:<br  />  simuladorFilas ()<br  />    { }<br  /> <br  />} oSimulador;


// from https://stackoverflow.com/questions/2704521/generate-random-double-numbers-in-c


double fRand(double fMin, double fMax)<br  />{<br  />    double f = (double)rand() / RAND_MAX;<br  />    return fMin + f * (fMax - fMin);<br  />}


int main () {


  // Inicializar aqui a fila de eventos<br  />  double t;


  oSimulador.scheduleEvent (new standardArrival (t=fRand(1.0,10.0)));<br  />  oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0)));<br  />  oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0)));


  // Executar simulador<br  />  oSimulador.run ();<br  />  return 0;<br  />}