#include "discsim.h" int reps=0; class Test_Proc: public ActiveEntity { private: float start_Time; int my_no; public: Test_Proc(char*,float); void do_it(); }; Count* tries1, * tries2; Average* elapsed; float delay1, delay2; Resource* shared; Scheduler * runner; void Test_Proc::do_it() {int i; cout<now()<<" "<now(); tries1->update(1); new Test_Proc("TP",delay1); nextEvent = 1; s->wait(this); break; case 1: nextEvent = 2; shared->acquire(this); break; case 2: evTime += delay2; nextEvent = 3; s->wait(this); break; case 3: shared->release(); nextEvent = 99; s->wait(this); break; case 99: elapsed->update(runner->now() - start_Time); tries2->update(1); trace("Terminate"); nextEvent = -1; break; default: error("attempt to reactivate terminated Proc ",Title); break; } } Test_Proc::Test_Proc(char* title, float when): ActiveEntity(runner,title,when) { my_no=reps++; } Test_Proc *tp1, *tp2; void main() { float t; Collection repts; Report counts("Counts"), averages("averages"); counts.into(&repts); averages.into(&repts); runner = new Scheduler(&repts); tries1 = new Count("Starts"); counts.add_to(tries1); tries2 = new Count("Finishes"); counts.add_to(tries2); elapsed = new Average("Duration of Procs"); averages.add_to(elapsed); shared = new Resource("shared"); tp1 = new Test_Proc("Proc1",0.0); cout<<"Interarrival Time?\n";cin>>delay1; cout<<"Service Time?\n";cin>>delay2; cout<<"Simulation length?\n";cin>>t; runner->run(t); }