Скачиваний:
40
Добавлен:
01.05.2014
Размер:
3.17 Кб
Скачать
{ "ЋЇҐа жЁ®­­лҐ баҐ¤л Ђ‘Ћ€“"
Copyrights 2003 "9331 super group"
‹ Ў®а в®а­ п а Ў®в  7

€бЇ®«м§®ў ­ЁҐ ЎгдҐа®ў }

Program Lab7;

Uses Corout,CRT;

Const
ReadDelay : Word = 6; { —Ґ¬ Ў®«миҐ - ⥬ ¬Ґ¤«Ґ­­ҐҐ а Ў®в ов }
WriteDelay : Word = 5; { зЁв ойЁ© Ё ЇЁйгйЁ© Їа®жҐббл }

{-----------------------------------------------------}
Var
SScr : TSemaphore; { ђ §аҐиҐ­ЁҐ ­  ўлў®¤ ­  нЄа ­ }
Box : TPostBox;

{ ‚лў®¤ б®бв®п­Ёп PostBox ­  нЄа ­ }
Procedure ShowPostBoxState; far;
Var i:Word; CurMes:PMessage;
Begin
while true do begin
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа ­  }
GotoXY(1,10);
Writeln('C®бв®п­ЁҐ PostBox:');
CurMes := Box.MessageList.Root; { Џа®бв® ўлў®¤Ё¬ бЇЁб®Є б®®ЎйҐ­Ё© ­  нЄа ­ }
While CurMes<>nil do
Begin
Write('[',CurMes^.Data,'] ');
CurMes := CurMes^.Next;
End;
Writeln(' ');
Writeln(' ');
Writeln('Љ®«-ў® Їа®жҐбб®ў Ї®б« ўиЁе б®®ЎйҐ­Ёп ',Box.SendProcList.Count,
' ¦¤гйЁе б®®ЎйҐ­ЁҐ ',Box.WaitProcList.Count);
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа ­  }
end {while};
End;

{ -- Џа®жҐбб - § б®аЁвҐ«м пйЁЄ  -- }
Procedure BoxDeamon; far;
Var Msg : PMessage;
Begin
while true do begin
New(Msg);
Msg^.Data := Chr(Ord('A')+Random(26));
Box.PutMsg(Msg); { ЏЁиҐ¬ ®¤Ё­ бЁ¬ў®« }
{ € ўЇ ¤ Ґ¬ ў бЇпзЄг ­  б«гз ©­®Ґ зЁб«® в Єв®ў }
DelayList.Delay(Random(WriteDelay)+10);
end {while};
End;

{ -- Џа®жҐбб -  ­ЈҐ«-еа ­ЁвҐ«м зЁбв®вл пйЁЄ  -- }
Procedure BoxAngel; far;
Var Msg : PMessage;
Begin
while true do begin
Msg := Box.GetMsg; { —Ёв Ґ¬ ®¤Ё­ бЁ¬ў®« }
Dispose(Msg);
{ € ўЇ ¤ Ґ¬ ў бЇпзЄг ­  б«гз ©­®Ґ зЁб«® в Єв®ў }
DelayList.Delay(14);
end {while};
End;

{-- Џа®жҐбб ¤«п ўл室  Ё гЇа ў«Ґ­Ёп § ¤Ґа¦Є ¬Ё --}
Procedure CommandCenter; far;
Var CurKey:Char; { ’ҐЄгй п ­ ¦ в п Є« ўЁи  }
Begin
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа ­  }
Writeln('ESC - ‚л室 Ё§ Їа®Ја ¬¬л');
Writeln('------------------------');
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа ­  }
while true do begin
if KeyPressed then begin
CurKey := ReadKey;
Case CurKey of
#27: { ESC - ‚л室 Ё§ бЁб⥬л }
Begin
Writeln; Writeln; Writeln; Writeln; Writeln;
Writeln('‚л室 Ї® Є« ўЁиҐ ESC!');
ReadyList.Stop_Manager;
End;
End;
end;
end {while};
End;

{-----------------------------------------------------}
Var i : Longint;
Begin
Randomize;
SScr.Init(1); { €­ЁжЁ «Ё§ жЁп ᥬ д®а  ўлў®¤  ­  нЄа ­ }
Box.Init; { €­ЁжЁ «Ё§ жЁп пйЁЄ  }
{ „®Ў ў«пҐ¬ Їа®жҐббл }
ReadyList.Add_New_Process(ShowPostBoxState);
ReadyList.Add_New_Process(CommandCenter);
For i:=1 to 6 do ReadyList.Add_New_Process(BoxAngel);
For i:=1 to 6 do ReadyList.Add_New_Process(BoxDeamon);
{ ‡ ЇгбЄ ¬­®Ј®§ ¤ з­®© бЁб⥬л }
ReadyList.Run_Manager;
{}
SScr.Done; { ЋвзЁбвЄ  Ї ¬п⨠ᥬ д®а  }
Box.Done; { ЋвзЁбвЄ  Ї ¬пвЁ пйЁЄ  }
{ ЋвзЁбвЄ  Ї ¬пвЁ бЁб⥬­ле ®зҐаҐ¤Ґ© }
Free_All_Subsystems;
End.
Соседние файлы в папке lab_7_1