home *** CD-ROM | disk | FTP | other *** search
- Program EX_0804;
- {Listing 16P - see documentation in TUTOR.SSS}
-
- uses SSS;
- { For Pascal other than Turbo/Quick erase above line }
-
- const
- ARRIVL = 1;
- STARTA = 2;
- ENDACT = 3;
- NEXTAC = 4;
-
- TIMEL = 150;
-
- { For MS Pascal $include:'SSSP1.H' }
-
- var
- n, server, ecode : integer;
- f : text;
-
- { For MS Pascal $include:'SSSP2.H' }
-
- procedure prime;
- begin
- n := 0;
- server := 1;
- INIQUE(1,0,1);
- CREATE(0, n);
- SIMEND(TIMEL);
- assign(f, 'sss.prn');
- rewrite(f);
- end;
-
- begin
-
- prime;
-
- repeat
- ecode := NEXTEV;
- if ecode > 0 then
- begin
- case ecode of
-
- ARRIVL: begin
- n := n + 1;
- CREATE(EX(1), n);
- SCHED(0, NEXTAC, IDE);
- end;
-
- NEXTAC: if server > 0 then SCHED(0, STARTA, IDE)
- else
- begin
- QUEUE(1, 0);
- writeln(f, T:7:2,' ',NQ(1):3,' ',
- QAVG(1):4:1,' ',QSTD(1):5:2);
- writeln('At',T:7:2,' q-size incr to:',NQ(1):3,
- ' ave q=',QAVG(1):4:1,' std q=',
- QSTD(1):5:2);
- end;
-
- STARTA: begin
- SCHED(EX(0.9), ENDACT, IDE);
- server := server - 1;
- end;
-
- ENDACT: begin
- DISPOS;
- server := server + 1;
- if NQ(1) > 0 then
- begin
- REMVFQ(1,1);
- SCHED(0, STARTA, IDE);
- writeln(f, T:7:2,' ',NQ(1):3,' ',
- QAVG(1):4:1,' ',QSTD(1):5:2);
- writeln('At',T:7:2,' q-size dicr to:',
- NQ(1):3,' ave q=',QAVG(1):4:1,
- ' std q=',QSTD(1):5:2);
- end;
- end;
- end;
- end;
- until ecode = 0;
-
- end.