//////////////////////////////////////////////////////////////////////////// // Model MODEL5.CPP SIMLIB/C++ // // Ukázkový model obslužného střediska (2 zařízení 1 fronta), jiná strategie // #include "simlib.h" // deklarace globálních objektů Facility Box[2]; // bohužel nelze inicializovat Queue InQueue("Vstupní"); Histogram Tabulka("Tabulka",0,5,20); class Zakaznik : public Process { // třída zákazníků double Prichod; // atribut každého zákazníka int BoxNum; void Behavior() { // --- popis chování zákazníka --- Prichod = Time; // čas příchodu zákazníka BoxNum = (Random()<0.5) ? 0 : 1; if (Box[BoxNum].Busy()) {Into(InQueue); Passivate(); } // ##### ????? !!!!!! Seize(Box[BoxNum]); // obsazení zařízení Wait(10); // obsluha Release(Box[BoxNum]); // uvolnění for( Queue::iterator p = InQueue.begin(); p != InQueue.end(); ++p ) { Zakaznik *z = (Zakaznik*)(*p); if( z->BoxNum == BoxNum ) { z->Out(); z->Activate(); break; } } // for Tabulka(Time-Prichod); // doba obsluhy a čekání } public: Zakaznik() { Activate(); } // konstruktor aktivuje }; // Zakaznik 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(" MODEL5 - test SIMLIB\n"); SetOutput("model5.out"); Init(0,1000); // inicializace experimentu, čas bude 0..1000 Box[0].SetName("Box[0]"); 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