//////////////////////////////////////////////////////////////////////////// // Model MODEL4.CPP SIMLIB/C++ // // Ukázkový model obslužného střediska (2 zařízení 1 fronta) // #include "simlib.h" #include // 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