home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 349_01 / sss.arc / EX_0804.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-10  |  2KB  |  85 lines

  1. Program EX_0804;
  2. {Listing 16P - see documentation in TUTOR.SSS}
  3.  
  4. uses SSS;
  5. { For Pascal other than Turbo/Quick erase above line }
  6.  
  7. const
  8.   ARRIVL = 1;
  9.   STARTA = 2;
  10.   ENDACT = 3;
  11.   NEXTAC = 4;
  12.  
  13.   TIMEL = 150;
  14.  
  15. { For MS Pascal $include:'SSSP1.H' }
  16.  
  17. var
  18.   n, server, ecode    : integer;
  19.   f : text;
  20.  
  21. { For MS Pascal $include:'SSSP2.H' }
  22.  
  23. procedure prime;
  24. begin
  25.   n := 0;
  26.   server := 1;
  27.   INIQUE(1,0,1);
  28.   CREATE(0, n);
  29.   SIMEND(TIMEL);
  30.   assign(f, 'sss.prn');
  31.   rewrite(f);
  32. end;
  33.  
  34. begin
  35.  
  36.   prime;
  37.  
  38.   repeat
  39.     ecode := NEXTEV;
  40.     if ecode > 0 then
  41.     begin
  42.       case ecode of
  43.  
  44.       ARRIVL: begin
  45.                 n := n + 1;
  46.                 CREATE(EX(1), n);
  47.                 SCHED(0, NEXTAC, IDE);
  48.               end;
  49.  
  50.       NEXTAC: if server > 0 then SCHED(0, STARTA, IDE)
  51.               else
  52.               begin
  53.                 QUEUE(1, 0);
  54.                 writeln(f, T:7:2,' ',NQ(1):3,' ',
  55.                         QAVG(1):4:1,' ',QSTD(1):5:2);
  56.                 writeln('At',T:7:2,' q-size incr to:',NQ(1):3,
  57.                         ' ave q=',QAVG(1):4:1,' std q=',
  58.                         QSTD(1):5:2);
  59.               end;
  60.  
  61.       STARTA: begin
  62.                  SCHED(EX(0.9), ENDACT, IDE);
  63.                  server := server - 1;
  64.               end;
  65.  
  66.       ENDACT: begin
  67.                 DISPOS;
  68.                 server := server + 1;
  69.                 if NQ(1) > 0 then
  70.                 begin
  71.                   REMVFQ(1,1);
  72.                   SCHED(0, STARTA, IDE);
  73.                   writeln(f, T:7:2,' ',NQ(1):3,' ',
  74.                           QAVG(1):4:1,' ',QSTD(1):5:2);
  75.                   writeln('At',T:7:2,' q-size dicr to:',
  76.                           NQ(1):3,' ave q=',QAVG(1):4:1,
  77.                           ' std q=',QSTD(1):5:2);
  78.                 end;
  79.               end;
  80.       end;
  81.     end;
  82.   until ecode = 0;
  83.  
  84. end.
  85.