home *** CD-ROM | disk | FTP | other *** search
- -- Chapter 27 - Program 6
- with Text_IO;
- use Text_IO;
-
- procedure Family is
-
- package Int_IO is new Text_IO.Integer_IO(INTEGER);
- use Int_IO;
-
- type SPEED is (FAST, MEDIUM, SLOW);
-
- task Selector is
- entry Answer_Query(SPEED)(Counter : INTEGER);
- end Selector;
-
- procedure Output_Value(Counter : INTEGER) is
- begin
- Put(Counter);
- New_Line;
- end Output_Value;
-
- task body Selector is
- begin
- loop
- select
- accept Answer_Query(FAST)(Counter : INTEGER) do
- Put("FAST Query made");
- Output_Value(Counter);
- end;
- or
- when Answer_Query(FAST)'COUNT = 0 =>
- accept Answer_Query(MEDIUM)(Counter : INTEGER) do
- Put("MEDIUM Query made");
- Output_Value(Counter);
- end;
- or
- when Answer_Query(FAST)'COUNT = 0 and
- Answer_Query(MEDIUM)'COUNT = 0 =>
- accept Answer_Query(SLOW)(Counter : INTEGER) do
- Put("SLOW Query made");
- Output_Value(Counter);
- end;
- or
- terminate;
- end select;
- end loop;
- end Selector;
-
- begin
-
- Put_Line("Begin the main program");
- Selector.Answer_Query(FAST)(1);
- Selector.Answer_Query(FAST)(2);
- Selector.Answer_Query(SLOW)(3);
- Selector.Answer_Query(MEDIUM)(4);
- Selector.Answer_Query(SLOW)(5);
- Selector.Answer_Query(MEDIUM)(6);
- Selector.Answer_Query(FAST)(7);
- Selector.Answer_Query(FAST)(8);
- Put_Line("End of the main program");
-
- end Family;
-
-
-
-
- -- Result of Execution
-
- -- Begin the main program
- -- FAST Query made 1
- -- FAST Query made 2
- -- SLOW Query made 3
- -- MEDIUM Query made 4
- -- SLOW Query made 5
- -- MEDIUM Query made 6
- -- FAST Query made 7
- -- FAST Query made 8
- -- End of main program
-
-