////////////////////////////////////////////////////////////////////////////
// Model MODEL4.CPP SIMLIB/C++
//
// Ukázkový model obslužného střediska (2 zařízení 1 fronta)
//
#include "simlib.h"
#include <stdio.h>
// deklarace globálních objektů
Facility Box[2]; // bohužel nelze inicializovat
Queue InQueue("Čekající zákazníci");
Histogram Tabulka("Tabulka",0,5,20);
class Zakaznik : public Process { // třída zákazníků
double Prichod; // atribut každého zákazníka
void Behavior() { // --- popis chování zákazníka ---
Prichod = Time; // čas příchodu zákazníka
if (!Box[0].Busy()) Seize(Box[0]); // obsazení zařízení1
else if (!Box[1].Busy()) Seize(Box[1]); // obsazení zařízení2
else {
Into(InQueue); Passivate(); // čekání ve frontě
// zařízení1 nebo zařízení2 při Release automaticky obsadí
// pozor - změna sémantiky ve verzi SIMLIB 2.17
}
Wait(10); // obsluha
// pozor!! nevíme, které zařízení jsme skutečně obsadili
if (Box[0].in==this) Release(Box[0]); // uvolnění
else Release(Box[1]);
Tabulka(Time-Prichod); // doba obsluhy a čekání
}
public: Zakaznik() { Activate(); } // konstruktor aktivuje
};
class Generator : public Event { // generátor zákazníků
void Behavior() { // --- popis chování generátoru ---
new Zakaznik; // nový zákazník
Activate(Time+Exponential(1e3/150)); // interval mezi příchody
}
public: Generator() { Activate(); } // konstruktor aktivuje
};
int main() {
Print(" MODEL4 - test SIMLIB\n");
SetOutput("model4.out");
Init(0,1000); // inicializace experimentu, čas bude 0..1000
Box[0].SetQueue(InQueue);
Box[0].SetName("Box[0]");
Box[1].SetQueue(InQueue);
Box[1].SetName("Box[1]");
new Generator; // generátor zákazníků
Run(); // simulace
Box[0].Output(); // tisk výsledků
Box[1].Output();
InQueue.Output();
Tabulka.Output();
return 0;
}
// konec
syntax highlighted by Code2HTML, v. 0.9.1