Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №6 по О-Средам / lab_6_1 / LAB6
.PAS { "ЋЇҐа жЁ®лҐ баҐ¤л Ђ‘Ћ€“"
Copyrights 2003 "9331 super group"
‹ Ў®а в®а п а Ў®в 6
€бЇ®«м§®ў ЁҐ ЎгдҐа®ў }
Program Lab6;
Uses Corout,CRT;
Const
ReadDelay : Word = 8; { —Ґ¬ Ў®«миҐ - ⥬ ¬Ґ¤«ҐҐҐ а Ў®в ов }
WriteDelay : Word = 6; { зЁв ойЁ© Ё ЇЁйгйЁ© Їа®жҐббл }
{-----------------------------------------------------}
Var
SScr : TSemaphore; { ђ §аҐиҐЁҐ ўлў®¤ нЄа }
Buf : TBuffer;
{ ‚лў®¤ б®бв®пЁп ЎгдҐа нЄа }
Procedure ShowBufferState; far;
Var i : Word;
Begin
while true do begin
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа }
GotoXY(1,10);
Writeln('C®бв®пЁҐ ЎгдҐа ');
Writeln('‡ пв®: ',Buf.n,' з⥨Ґ: ',Buf._in,
' § ЇЁбм: ',Buf._out,' ');
Write('[');
For i:=0 to (Buf.BufferSize-1) do
Begin
If i=Buf._in then TextColor(4);
If i=Buf._out then TextColor(15);
Write(Buf.Buf^[i]);
TextColor(7);
End;
Writeln(']');
Writeln('Џа®жҐбб®ў ў ®зҐаҐ¤Ё з⥨п ',Buf.ReadList.Count,
' ў ®зҐаҐ¤Ё § ЇЁбЁ ',Buf.WriteList.Count);
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа }
end {while};
End;
{ -- Џа®жҐбб - § б®аЁвҐ«м ЎгдҐа -- }
Procedure BufDeamon; far;
Begin
while true do begin
Buf.Write(Chr(Ord('A')+Random(26))); { ЏЁиҐ¬ ®¤Ё бЁ¬ў®« }
{ € ўЇ ¤ Ґ¬ ў бЇпзЄг б«гз ©®Ґ зЁб«® в Єв®ў }
DelayList.Delay(Random(WriteDelay)+5);
end {while};
End;
{ -- Џа®жҐбб - ЈҐ«-еа ЁвҐ«м зЁбв®вл ЎгдҐа -- }
Procedure BufAngel; far;
Var C : Char;
Begin
while true do begin
Buf.Read(C); { —Ёв Ґ¬ ®¤Ё бЁ¬ў®« }
{ € ўЇ ¤ Ґ¬ ў бЇпзЄг б«гз ©®Ґ зЁб«® в Єв®ў }
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('‚л室 Ї® Є« ўЁиҐ ESC!');
ReadyList.Stop_Manager;
End;
End;
end;
end {while};
End;
{-----------------------------------------------------}
Var i : Longint;
Begin
Randomize;
SScr.Init(1); { €ЁжЁ «Ё§ жЁп ᥬ д®а ўлў®¤ нЄа }
Buf.Init(70); { €ЁжЁ «Ё§ жЁп ЎгдҐа }
For i:=0 to (Buf.BufferSize-1) do
Buf.Buf^[i]:=' ';
{ „®Ў ў«пҐ¬ Їа®жҐббл }
ReadyList.Add_New_Process(ShowBufferState);
ReadyList.Add_New_Process(CommandCenter);
For i:=1 to 3 do ReadyList.Add_New_Process(BufAngel);
For i:=1 to 3 do ReadyList.Add_New_Process(BufDeamon);
{ ‡ ЇгбЄ ¬®Ј®§ ¤ з®© бЁб⥬л }
ReadyList.Run_Manager;
{}
SScr.Done; { ЋвзЁбвЄ Ї ¬п⨠ᥬ д®а }
Buf.Done; { ЋвзЁбвЄ Ї ¬пвЁ ЎгдҐа }
{ ЋвзЁбвЄ Ї ¬пвЁ бЁб⥬ле ®зҐаҐ¤Ґ© }
Free_All_Subsystems;
End.
Copyrights 2003 "9331 super group"
‹ Ў®а в®а п а Ў®в 6
€бЇ®«м§®ў ЁҐ ЎгдҐа®ў }
Program Lab6;
Uses Corout,CRT;
Const
ReadDelay : Word = 8; { —Ґ¬ Ў®«миҐ - ⥬ ¬Ґ¤«ҐҐҐ а Ў®в ов }
WriteDelay : Word = 6; { зЁв ойЁ© Ё ЇЁйгйЁ© Їа®жҐббл }
{-----------------------------------------------------}
Var
SScr : TSemaphore; { ђ §аҐиҐЁҐ ўлў®¤ нЄа }
Buf : TBuffer;
{ ‚лў®¤ б®бв®пЁп ЎгдҐа нЄа }
Procedure ShowBufferState; far;
Var i : Word;
Begin
while true do begin
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа }
GotoXY(1,10);
Writeln('C®бв®пЁҐ ЎгдҐа ');
Writeln('‡ пв®: ',Buf.n,' з⥨Ґ: ',Buf._in,
' § ЇЁбм: ',Buf._out,' ');
Write('[');
For i:=0 to (Buf.BufferSize-1) do
Begin
If i=Buf._in then TextColor(4);
If i=Buf._out then TextColor(15);
Write(Buf.Buf^[i]);
TextColor(7);
End;
Writeln(']');
Writeln('Џа®жҐбб®ў ў ®зҐаҐ¤Ё з⥨п ',Buf.ReadList.Count,
' ў ®зҐаҐ¤Ё § ЇЁбЁ ',Buf.WriteList.Count);
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа }
end {while};
End;
{ -- Џа®жҐбб - § б®аЁвҐ«м ЎгдҐа -- }
Procedure BufDeamon; far;
Begin
while true do begin
Buf.Write(Chr(Ord('A')+Random(26))); { ЏЁиҐ¬ ®¤Ё бЁ¬ў®« }
{ € ўЇ ¤ Ґ¬ ў бЇпзЄг б«гз ©®Ґ зЁб«® в Єв®ў }
DelayList.Delay(Random(WriteDelay)+5);
end {while};
End;
{ -- Џа®жҐбб - ЈҐ«-еа ЁвҐ«м зЁбв®вл ЎгдҐа -- }
Procedure BufAngel; far;
Var C : Char;
Begin
while true do begin
Buf.Read(C); { —Ёв Ґ¬ ®¤Ё бЁ¬ў®« }
{ € ўЇ ¤ Ґ¬ ў бЇпзЄг б«гз ©®Ґ зЁб«® в Єв®ў }
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('‚л室 Ї® Є« ўЁиҐ ESC!');
ReadyList.Stop_Manager;
End;
End;
end;
end {while};
End;
{-----------------------------------------------------}
Var i : Longint;
Begin
Randomize;
SScr.Init(1); { €ЁжЁ «Ё§ жЁп ᥬ д®а ўлў®¤ нЄа }
Buf.Init(70); { €ЁжЁ «Ё§ жЁп ЎгдҐа }
For i:=0 to (Buf.BufferSize-1) do
Buf.Buf^[i]:=' ';
{ „®Ў ў«пҐ¬ Їа®жҐббл }
ReadyList.Add_New_Process(ShowBufferState);
ReadyList.Add_New_Process(CommandCenter);
For i:=1 to 3 do ReadyList.Add_New_Process(BufAngel);
For i:=1 to 3 do ReadyList.Add_New_Process(BufDeamon);
{ ‡ ЇгбЄ ¬®Ј®§ ¤ з®© бЁб⥬л }
ReadyList.Run_Manager;
{}
SScr.Done; { ЋвзЁбвЄ Ї ¬п⨠ᥬ д®а }
Buf.Done; { ЋвзЁбвЄ Ї ¬пвЁ ЎгдҐа }
{ ЋвзЁбвЄ Ї ¬пвЁ бЁб⥬ле ®зҐаҐ¤Ґ© }
Free_All_Subsystems;
End.