Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Конспект лекций для групп АСОИУ / L15
.TXT я23.10. ЏаЁ¬ЁвЁўл п¤а ¤«п ®Ў¬Ґ б®®ЎйҐЁп¬Ё
Ќ Ї®¬о, зв® ¬л Є« ббЁдЁжЁа®ў «Ё ЇаЁ¬ЁвЁўл п¤а ваЁ
ЈагЇЇл:
1) ЇаЁ¬ЁвЁўл гЇа ў«ҐЁп Їа®жҐбб ¬Ё;
2) ЇаЁ¬ЁвЁўл бЁеа®Ё§ жЁЁ Їа®жҐбб®ў;
3) ЇаЁ¬ЁвЁўл ®Ў¬Ґ ¤ л¬Ё.
‘Ёеа®Ё§ жЁп Ё ®Ў¬Ґ ¤ л¬Ё ў¬Ґб⥠§лў овбп ®Ў®ЎйҐ®
я2ў§ Ё¬®¤Ґ©бвўЁҐ¬.я0
…б«Ё ®Їпвм Ї®бва®Ёвм ҐЄ®в®аго ¬®Ј®га®ўҐўго Є« ббЁдЁЄ жЁо,
в® ЇаЁ¬ЁвЁўл ўв®а®Ј® Ё ваҐв쥣® Є« бб б«Ґ¤гҐв Ї®¬ҐбвЁвм
ў б«Ґ¤гойго ЁҐа аеЁзҐбЄго б奬г:
ЋЎ¬Ґ ¤ л¬Ё
ДДДДДДДДДДДДД
‘Ёеа®Ё§ жЁп
’.Ґ. ®Ў¬Ґ ¤ л¬Ё - нв® «®ЈЁзҐбЄЁ Ў®«ҐҐ ўлб®ЄЁ© га®ўҐм
ў§ Ё¬®¤Ґ©бвўЁп Їа®жҐбб®ў, 祬 бЁеа®Ё§ жЁп.
ЋЎ¬Ґ ¤ л¬Ё Ґ ¬®¦Ґв Ўлвм ॠ«Ё§®ў ЎҐ§ бЁеа®Ё§ жЁЁ.
ЏаЁ н⮬ б।бвў бЁеа®Ё§ жЁЁ "ўбва Ёў овбп" ў б।бвў ®Ў¬Ґ
¤ л¬Ё в ЄЁ¬ ®Ўа §®¬, зв® ®Ё ®Є §лў овбп бЄалвл¬Ё ®в
Ї®«м§®ў ⥫п.
Џ®«м§®ў вҐ«о ЇаҐ¤®бв ў«пҐвбп Ї а ЇаЁ¬ЁвЁў®ў вЁЇ : SEND,
RECEIVE Ё«Ё READ, WRITE.
ЋЎ¬Ґ ¤ л¬Ё ¬®¦Ґв а бб¬ ваЁў вмбп ў ¤ўге бЇҐЄв е.
1) ®Ў¬Ґ Їа®Ёб室Ёв ¬Ґ¦¤г Їа®жҐбб ¬Ё, ўлЇ®«пойЁ¬Ёбп
®¤®© дЁ§ЁзҐбЄ®© ¬ иЁҐ;
2) ®Ў¬Ґ Їа®Ёб室Ёв ¬Ґ¦¤г Їа®жҐбб ¬Ё, ўлЇ®«пойЁ¬Ёбп
а §«Ёзле дЁ§ЁзҐбЄЁе ¬ иЁ е.
‚ ¤ ®¬ Ї а Ја дҐ ¬л а бᬮваЁ¬ ЇҐаўл© ў аЁ в ®Ў¬Ґ
¤ л¬Ё, а бб¬ ваЁў п б।бвў ®Ў¬Ґ Є Є ЇаЁ¬ЁвЁўл п¤а . Њл
гўЁ¤Ё¬, Єбв вЁ, зв® нвЁ ЇаЁ¬ЁвЁўл Ї®¤Ї ¤ ов Ї®¤ ®ЇаҐ¤Ґ«ҐЁҐ
Ї®пвЁп ЊЋЌ€’Ћђ, а бᬮв८Ґ ўлиҐ.
ЋЎ¬Ґг ¤ л¬Ё ў 楫®¬, б гзҐв®¬ ў®§¬®¦®бвЁ ўлЇ®«ҐЁп
ў§ Ё¬®¤Ґ©бвўгойЁе Їа®жҐбб®ў а §«Ёзле ¬ иЁ е, Ї®бўпйҐ
бЇҐжЁ «мл© а §¤Ґ«, а бб¬ ваЁў ойЁ© ў®б쬮© га®ўҐм Ў §®ў®©
Є« ббЁдЁЄ жЁЁ ®ЇҐа жЁ®®© б।л - га®ўҐм Є®¬¬гЁЄ жЁ©.
Љ Є Ё а ҐҐ, ¬л а бᬮваЁ¬ ¬®¤Ґ«Ё ®Ў¬Ґ ¤ л¬Ё, § ⥬
ЇаЁўҐ¤Ґ¬ ЇаЁ¬Ґал б।бвў ®Ў¬Ґ ¤ л¬Ё ў ॠ«мле ®ЇҐа жЁ®ле
б। е.
Ѓ §®ўл¬ б।бвў®¬ ®Ў¬Ґ ¤ л¬Ё ¬Ґ¦¤г Їа®жҐбб ¬Ё пў«пҐвбп
б।бвў®, §лў Ґ¬®Ґ ЎгдҐа®¬.
я23.10.1. ЃгдҐа Є Є б।бвў® Є®¬¬гЁЄ жЁЁ ¬Ґ¦¤г Їа®жҐбб ¬Ё
ЏаЁ ®аЈ Ё§ жЁЁ бўп§Ё ¬Ґ¦¤г Їа®жҐбб ¬Ё б Ї®¬®ймо «оЎ®Ј®
б।бвў вॡгҐвбп б®бв ўЁвм бЇҐжЁдЁЄ жЁо Є н⮬г б।бвўг.
‘ЇҐжЁдЁЄ жЁп ЎгдҐа Є Є б।бвў бўп§Ё ўлЈ«п¤Ёв б«Ґ¤гойЁ¬
®Ўа §®¬:
- б®®ЎйҐЁп ў ЎгдҐаҐ Ё¬Ґов дЁЄбЁа®ў л© а §¬Ґа;
- а §¬Ґа ЎгдҐа ®Ја ЁзҐ, ЎгдҐа - Є®«м楢®©;
- Ї®бл«Є б®®ЎйҐЁп ў Ї®«л© ЎгдҐа Ґ¤®ЇгбвЁ¬ ;
- з⥨Ґ б®®ЎйҐЁп Ё§ Їгбв®Ј® ЎгдҐа в Є¦Ґ Ґ¤®ЇгбвЁ¬ .
ЏҐаҐзЁб«Ёў гб«®ўЁп дгЄжЁ®Ёа®ў Ёп ЎгдҐа , ¬®¦® Ї®бва®Ёвм
ҐЈ® ®ЇЁб ЁҐ, а бб¬ ваЁў п ЎгдҐа ў ўЁ¤Ґ ¬®Ёв®а .
Type
PBuffer = ^TBuffer;
TBuffer = Object
n : [0..N]; {⥪г饥 Є®«ЁзҐбвў® б®®ЎйҐЁ© ў ЎгдҐаҐ}
in : [0..N-1]; {Ё¤ҐЄб п祩ЄЁ, ў Є®в®аго Їа®Ё§ў®¤Ёвбп}
{⥪гй п § ЇЁбм}
out : [0..N-1]; {Ё¤ҐЄб п祩ЄЁ, Ё§ Є®в®а®© Їа®Ё§ў®¤Ёвбп}
{⥪г饥 з⥨Ґ}
Buf : Array[0..N-1] Of TMessage;
RList : PList; {®зҐаҐ¤м Їа®жҐбб®ў, ¦¤гйЁе з⥨п}
WList : PList; {®зҐаҐ¤м Їа®жҐбб®ў, ¦¤гйЁе § ЇЁбЁ}
Constructor Init;
Destructor Done;
Procedure Write(M : TMessage);
Procedure Read(Var M : TMessage);
End {TBuffer};
‘奬 ЁбЇ®«м§®ў Ёп ЎгдҐа ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬.
Var
B : PBuffer;
Begin
B := New(PBuffer, Init);
...
Dispose(B, Done);
End.
Џа®жҐбб 1: Џа®жҐбб 2:
Procedure Џа®Ё§ў®¤ЁвҐ«м; Procedure Џ®вॡЁвҐ«м;
Var Var
Message : TMessage; Message : TMessage;
Begin Begin
While True Do Begin While True Do Begin
... ...
‘д®а¬Ёа®ў вм(Message); B^.Read(Message);
B^.Write(Message); ЋЎа Ў®в вм(Message);
... ...
End {While}; End {While};
End {Џа®Ё§ў®¤ЁвҐ«м}; End {Џ®вॡЁвҐ«м};
–Ґ«мо ЁбЇ®«м§®ў Ёп ЎгдҐа ЇаЁ ®Ў¬ҐҐ ¤ л¬Ё ¬Ґ¦¤г
Їа®жҐбб ¬Ё пў«пҐвбп б®Ј« б®ў ЁҐ бЄ®а®б⥩ § ЇЁбЁ Ё з⥨п
Ёд®а¬ жЁЁ а §«Ёзл¬Ё Їа®жҐбб ¬Ё.
…б«Ё бЄ®а®бвЁ § ЇЁбЁ Ё звҐЁп ®¤Ё Є®ўл, в® аЁбг®Є
б®бв®пЁп ЎгдҐа Ўг¤Ґв ўлЈ«п¤Ґвм ЇаЁ¬Ґа® в Є:
ЪДДДДДДДДДДДДДДДДДДї
і і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і ДДДДДДДДД> out з⥨Ґ
ГДДДДДДДДДДДДДДДДДДґ (зЁв Ґ¬ Ё§ ЇҐаў®©
і//////////////////і § пв®© п祩ЄЁ)
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
‡ ЇЁбм in ДДДДДД> і і
(ЇЁиҐ¬ ў ЇҐаўго ГДДДДДДДДДДДДДДДДДДґ
бў®Ў®¤го п祩Єг) і і
АДДДДДДДДДДДДДДДДДДЩ
…б«Ё бЄ®а®бвм звҐЁп ЇаҐўли Ґв бЄ®а®бвм § ЇЁбЁ, в® б奬
б®бв®пЁп ЎгдҐа Ўг¤Ґв ўлЈ«п¤Ґвм б«Ґ¤гойЁ¬ ®Ўа §®¬.
ЪДДДДДДДДДДДДДДДДДДї
і і
ГДДДДДДДДДДДДДДДДДДґ
і і
ГДДДДДДДДДДДДДДДДДДґ
і і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і ДДДДДДДДД> out з⥨Ґ
ГДДДДДДДДДДДДДДДДДДґ
‡ ЇЁбм in ДДДДДД> і і out -> in
ГДДДДДДДДДДДДДДДДДДґ
і і
АДДДДДДДДДДДДДДДДДДЩ
’.Ґ. ЎгдҐа Ўг¤Ґв Ў®«м襥 ўаҐ¬п Їгбвл¬, 祬 § пвл¬,
Їа®жҐбб, зЁв ойЁ© Ё§ ЎгдҐа , Ўг¤Ґв ¦¤ вм § ЇЁбЁ.
…б«Ё бЄ®а®бвм § ЇЁбЁ ЇаҐўли Ґв бЄ®а®бвм з⥨п, в® б奬
б®бв®пЁп ЎгдҐа Ўг¤Ґв ўлЈ«п¤Ґвм б«Ґ¤гойЁ¬ ®Ўа §®¬.
ЪДДДДДДДДДДДДДДДДДДї
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
‡ ЇЁбм in ДДДДДД> і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
in -> out і//////////////////і ДДДДДДДДД> out з⥨Ґ
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
АДДДДДДДДДДДДДДДДДДЩ
’.Ґ. ЎгдҐа Ўг¤Ґв Ў®«м襥 ўаҐ¬п Ї®«л¬, 祬 бў®Ў®¤л¬,
Їа®жҐбб, § ЇЁблў ойЁ© ў ЎгдҐа, Ўг¤Ґв ¦¤ вм з⥨п.
ђ ᯨ襬 ⥯Ґам ¬Ґв®¤л ¬®Ёв®а Ѓ“”…ђ.
Constructor TBuffer.Init;
Begin
n := 0;
in := 0;
out := 0;
RList := New(PList, Init);
WList := New(PList, Init);
End {TBuffer.Init};
Destructor TBuffer.Done;
Begin
Dispose(RList, Done);
Dispose(WList, Done);
End {TBuffer.Done};
Procedure TBuffer.Write(M : TMessage);
Begin
‡ ЇаҐв ЇаҐалў Ё©;
If n = N Then Begin {ЎгдҐа Ї®«®}
WList^.Insert(’ҐЄгйЁ© Їа®жҐбб); {¦¤Ґ¬ § ЇЁбЁ}
Џ…ђ…ЌЂ‡ЌЂ—€’њ ЏђЋ–…‘‘Ћђ;
End {If};
Inc(n);
Buf[in] := M;
in := (in + 1) MOD N;
If RList Ґ Їгбв п Then Begin { ЄвЁўЁ§ жЁп ¦¤г饣® з⥨п}
ЋзҐаҐ¤м_Ј®в®ўле.Insert(’ҐЄгйЁ© Їа®жҐбб);
WList^.Remove(ЏҐаўл© Їа®жҐбб);
ЏҐаҐ¤ вм гЇа ў«ҐЁҐ(’ҐЄгйЁ© Їа®жҐбб, ЏҐаўл© Їа®жҐбб);
End {If};
ђ §аҐиҐЁҐ ЇаҐалў Ё©;
End {TBuffer.Write};
Procedure TBuffer.Read(Var M : TMessage);
Begin
‡ ЇаҐйҐЁҐ ЇаҐалў Ё©;
If n = 0 Then Begin
RList^.Insert(’ҐЄгйЁ© Їа®жҐбб); {¦¤Ґ¬ з⥨п}
Џ…ђ…ЌЂ‡ЌЂ—€’њ ЏђЋ–…‘‘Ћђ;
End {If};
Dec(n);
M := Buf[out];
out := (out + 1) MOD N;
If WList Ґ Їгбв п Then Begin { ЄвЁўЁ§ жЁп ¦¤г饣® § ЇЁбЁ}
ЋзҐаҐ¤м_Ј®в®ўле.Insert(’ҐЄгйЁ© Їа®жҐбб);
RList^.Remove(ЏҐаўл© Їа®жҐбб);
ЏҐаҐ¤ вм гЇа ў«ҐЁҐ(’ҐЄгйЁ© Їа®жҐбб, ЏҐаўл© Їа®жҐбб);
End {If};
ђ §аҐиҐЁҐ ЇаҐалў Ё©;
End {TBuffer.Read};
я2‚лў®¤л
1) ‚ҐиҐ а Ў®в б ЎгдҐа®¬ Ї®¬Ё Ґв а Ў®вг б д ©«®¬:
‘®§¤ вм; ‡ ЇЁб вм; Џа®зЁв вм; ђ §агиЁвм;
ђ Ў®в «оЎле б।бвў ®Ў¬Ґ ¤ л¬Ё Ї®е®¦ нвЁ ¤Ґ©бвўЁп.
2) „ўҐ ®зҐаҐ¤Ё Їа®жҐбб®ў ЁбЇ®«м§говбп ў Є зҐб⢥ б।бвў
бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё з⥨п.
‚¬Ґбв® ЇаאַЈ® ЁбЇ®«м§®ў Ёп ®зҐаҐ¤Ґ© ¬®Јгв
ЁбЇ®«м§®ў вмбп ᥬ д®ал. ‚ н⮬ б«гз Ґ г¦ Ї а ᥬ д®а®ў,
Є®в®алҐ Ё¬Ґов б¬лб« "Ќ…_Џ“‘’" Ё "Ќ…_ЏЋ‹ЋЌ".
Љ®Ј¤ Їа®жҐбб ЇЁиҐв б®®ЎйҐЁҐ ў ЎгдҐа, ® ®Є §лў Ґвбп
Ї®«л¬, Їа®жҐбб ўлЇ®«пҐв ®ЇҐа жЁо Ќ…_ЏЋ‹ЋЌ.ђ.
…б«Ё ЎгдҐа Ґ Ї®«® Ё ®ЇҐа жЁп § ЇЁбЁ Їа®и« гбЇҐи®, в®
Їа®жҐбб ўлЇ®«пҐв ®ЇҐа жЁо Ќ…_Џ“‘’.V, ЄвЁўЁ§Ёагп зЁв ойЁ©
Їа®жҐбб, ¦¤гйЁ© § ЇЁбЁ.
Љ®Ј¤ Їа®жҐбб зЁв Ґв б®®ЎйҐЁҐ Ё§ ЎгдҐа , ® ®Є §лў Ґвбп
Їгбвл¬, Їа®жҐбб ўлЇ®«пҐв ®ЇҐа жЁо Ќ…_Џ“‘’.ђ.
…б«Ё ЎгдҐа Ґ Їгбв Ё ®ЇҐа жЁп звҐЁп Їа®и« гбЇҐи®, в®
Їа®жҐбб ўлЇ®«пҐв ®ЇҐа жЁо Ќ…_ЏЋ‹ЋЌ_V, ЄвЁўЁ§Ёагп ЇЁигйЁ©
Їа®жҐбб, ¦¤гйЁ© з⥨п.
3) ЌҐ¤®бв вЄ ¬Ё ЎгдҐа пў«повбп:
- дЁЄбЁа®ў л© а §¬Ґа;
- ॠ«м п ЇҐаҐ§ ЇЁбм ¤ ле ў ЎгдҐа Ё Ё§ ЎгдҐа .
‘«Ґ¤гойЁ© ¬Ґв®¤ ®Ў¬Ґ ¤ л¬Ё гбва пҐв Ґ¤®бв вЄЁ ЎгдҐа .
я23.10.2. Џ®зв®ўл© пйЁЄ б ®зҐаҐ¤мо б®®ЎйҐЁ©
“бва ҐЁп Ґ¤®бв вЄ ЎгдҐа , § Є«оз о饣®бп ў дЁЄбЁа®ў ®¬
ҐЈ® а §¬ҐаҐ, гбва пҐвбп Їг⥬ ЁбЇ®«м§®ў Ёп ¤Ё ¬ЁзҐбЄ®Ј®
®ЎкҐЄв - ®зҐаҐ¤Ё б®®ЎйҐЁ©.
“бва ҐЁҐ Ґ¤®бв вЄ ЎгдҐа , § Є«оз о饣®бп ў ॠ«м®©
ЇҐаҐ§ ЇЁбЁ ¤ ле, гбва пҐвбп Їг⥬ Ї®¬ҐйҐЁп ў ®зҐаҐ¤м
гЄ § ⥫Ґ© б®®ЎйҐЁп, Ґ б ¬Ёе б®®ЎйҐЁ©.
‚ Є зҐб⢥ б।бвў бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё звҐЁп Ї®-ЇаҐ¦Ґ¬г
Ўг¤Ґ¬ ЁбЇ®«м§®ў вм ®зҐаҐ¤Ё Їа®жҐбб®ў.
ЋЇЁиҐ¬ ®ЎкҐЄв, 㤮ў«Ґвў®апойЁ© ЇаЁўҐ¤Ґ®© ўлиҐ
бЇҐжЁдЁЄ жЁЁ, Ё §®ўҐ¬ ҐЈ® я2Ї®зв®ўл¬ пйЁЄ®¬.
Type
PPostBox = ^TPostBox;
TPostBox = Object
TList : PList; {®зҐаҐ¤м Їа®жҐбб®ў, Ї®б« ўиЁе б®®ЎйҐЁҐ}
RList : PList; {®зҐаҐ¤м Їа®жҐбб®ў, ¦¤гйЁе б®®ЎйҐЁп}
MList : PList; {®зҐаҐ¤м гЄ § ⥫Ґ© б®®ЎйҐЁп}
Constructor Init;
Destructor Done;
Procedure PutMsg(M : Pointer);
Procedure GetMsg(Var M : Pointer);
End {TPostBox};
я2‡ ¬Ґз Ёп
1) ‘奬 ЁбЇ®«м§®ў Ёп Ї®зв®ў®Ј® пйЁЄ ў ЇаЁЄ« ¤®©
Їа®Ја ¬¬Ґ «®ЈЁз б奬Ґ ЁбЇ®«м§®ў Ёп ЎгдҐа .
2) €§ ¤ўге ®зҐаҐ¤Ґ© - Їа®жҐбб®ў, Ї®б« ўиЁе б®®ЎйҐЁҐ, Ё
Їа®жҐбб®ў, ¦¤гйЁе б®®ЎйҐЁҐ, ў Їа®Ё§ў®«мл© ¬®¬Ґв ўаҐ¬ҐЁ
бгйҐбвўгҐв в®«мЄ® ®¤ .
3) Џа®жҐббл, ҐбвҐб⢥®, § ов вЁЇ б®®ЎйҐЁ© Є Є вЁЇ
¤ ле.
‘onstructor TPostBox.Init;
Begin
RList := New(PList, Init);
TList := New(PList, Init);
MList := New(PList, Init);
End {TPOstBox.Init};
Destructor TPostBox.Done;
Begin
Dispose(RList, Done);
Dispose(TList, Done);
Dispose(MList, Done);
End {TPostBox.Done};
Procedure TPostBox.PutMsg(M : Pointer);
Begin
‡ ЇаҐв ЇаҐалў Ё©;
MList^.Insert(M);
TList^.Insert(’ҐЄгйЁ© Їа®жҐбб);
If RList Ґ Їгбв Then
RList^.Remove(ЏҐаўл© Їа®жҐбб)
Else
ЋзҐаҐ¤м_Ј®в®ўле.Remove(ЏҐаўл© Їа®жҐбб);
ЏҐаҐ¤ вм гЇа ў«ҐЁҐ(’ҐЄгйЁ© Їа®жҐбб, ЏҐаўл© Їа®жҐбб);
ђ §аҐиҐЁҐ ЇаҐалў Ё©;
End {TPostBox.PutMsg};
Procedure TPostBox.GetMsg(Var M : Pointer);
Begin
‡ ЇаҐйҐЁҐ ЇаҐалў Ё©;
If MList Їгбв Then Begin
RList^.Insert(’ҐЄгйЁ© Їа®жҐбб); {¦¤Ґ¬ § ЇЁбЁ}
Џ…ђ…ЌЂ‡ЌЂ—€’њ ЏђЋ–…‘‘Ћђ;
End {If};
MList^.Remove(ЏҐаў®Ґ б®®ЎйҐЁҐ);
M := ЏҐаў®Ґ б®®ЎйҐЁҐ;
Tlist^.Remove(ЏҐаўл© Їа®жҐбб);
ЋзҐаҐ¤м_Ј®в®ўле.Insert(’ҐЄгйЁ© Їа®жҐбб);
ЏҐаҐ¤ вм гЇа ў«ҐЁҐ(’ҐЄгйЁ© Їа®жҐбб, ЏҐаўл© Їа®жҐбб);
ђ §аҐиҐЁҐ ЇаҐалў Ё©;
End {TPostBox.GetMsg};
ЏаЁўҐ¤ҐлҐ ЇаЁ¬ЁвЁўл а Ў®в ов б«Ґ¤гойЁ¬ ®Ўа §®¬.
ЏаҐ¤Ї®«®¦Ё¬, зв® ЇҐаўл¬ Є ЇаЁ¬ЁвЁўг Ї®зв®ў®Ј® пйЁЄ Ї®¤®©¤Ґв
Їа®жҐбб, § ЇЁблў ойЁ© б®®ЎйҐЁҐ.
Ћ Ї®¬Ґй Ґв ҐЈ® ў ®зҐаҐ¤м б®®ЎйҐЁ©, б ¬ ўбв Ґв ў ®зҐаҐ¤м
Їа®жҐбб®ў, Ї®б« ўиЁе б®®ЎйҐЁҐ.
Џа®жҐбб, Ї®¤®иҐ¤иЁ© ўв®ал¬ Є ЇаЁ¬ЁвЁўг з⥨п б®®ЎйҐЁп,
бзЁвлў Ґв ҐЈ® Ё§ ®зҐаҐ¤Ё б®®ЎйҐЁ© Ё ЄвЁўЁ§ЁагҐв Їа®жҐбб,
Ї®б« ўиЁ© ҐЈ®.
’ҐЇҐам ЇаҐ¤Ї®«®¦Ё¬, зв® ЇҐаўл¬ Є ЇаЁ¬ЁвЁўг Ї®зв®ў®Ј® пйЁЄ
Ї®¤®©¤Ґв Їа®жҐбб, зЁв ойЁ© б®®ЎйҐЁҐ.
Ћ Їа®ўҐапҐв «ЁзЁҐ б®®ЎйҐЁ© ў ®зҐаҐ¤Ё б®®ЎйҐЁ© Ё ЇаЁ Ёе
®вбгвбвўЁЁ Ў«®ЄЁагҐвбп ў ®зҐаҐ¤Ё ¦¤гйЁе б®®ЎйҐЁҐ.
Џа®жҐбб, Ї®¤®иҐ¤иЁ© ўв®ал¬ Є ЇаЁ¬ЁвЁўг § ЇЁбЁ б®®ЎйҐЁп,
Ї®¬Ґй Ґв б®®ЎйҐЁҐ ў ®зҐаҐ¤м, б ¬ ўбв Ґв ў ®зҐаҐ¤м Їа®жҐбб®ў,
Ї®б« ўиЁе б®®ЎйҐЁҐ, Ё ЄвЁўЁ§ЁагҐв Їа®жҐбб Ё§ ®зҐаҐ¤Ё Їа®жҐбб®ў,
¦¤гйЁе б®®ЎйҐЁҐ. ЂЄвЁўЁ§Ёа®ў л© Їа®жҐбб бзЁвлў Ґв б®®ЎйҐЁҐ Ё
ЄвЁўЁ§ЁагҐв Їа®жҐбб, Ї®б« ўиЁ© ҐЈ®.
’ Є®© бЇ®б®Ў ®Ў¬Ґ б®®ЎйҐЁп¬Ё, Є®Ј¤ ЇҐаҐ¤ ойЁ© Їа®жҐбб
Ў«®ЄЁагҐвбп, Ї®Є ҐЈ® б®®ЎйҐЁҐ Ґ Ўг¤Ґв ЇаЁпв® ЇаЁЁ¬ ойЁ¬
Їа®жҐбᮬ, §лў Ґвбп ђЂЌ„…‚“. ќв®в ¬Ґе Ё§¬ ॠ«Ё§®ў ў п§лЄҐ
Ђ„Ђ.
Ќ Ї®¬о, зв® ¬л Є« ббЁдЁжЁа®ў «Ё ЇаЁ¬ЁвЁўл п¤а ваЁ
ЈагЇЇл:
1) ЇаЁ¬ЁвЁўл гЇа ў«ҐЁп Їа®жҐбб ¬Ё;
2) ЇаЁ¬ЁвЁўл бЁеа®Ё§ жЁЁ Їа®жҐбб®ў;
3) ЇаЁ¬ЁвЁўл ®Ў¬Ґ ¤ л¬Ё.
‘Ёеа®Ё§ жЁп Ё ®Ў¬Ґ ¤ л¬Ё ў¬Ґб⥠§лў овбп ®Ў®ЎйҐ®
я2ў§ Ё¬®¤Ґ©бвўЁҐ¬.я0
…б«Ё ®Їпвм Ї®бва®Ёвм ҐЄ®в®аго ¬®Ј®га®ўҐўго Є« ббЁдЁЄ жЁо,
в® ЇаЁ¬ЁвЁўл ўв®а®Ј® Ё ваҐв쥣® Є« бб б«Ґ¤гҐв Ї®¬ҐбвЁвм
ў б«Ґ¤гойго ЁҐа аеЁзҐбЄго б奬г:
ЋЎ¬Ґ ¤ л¬Ё
ДДДДДДДДДДДДД
‘Ёеа®Ё§ жЁп
’.Ґ. ®Ў¬Ґ ¤ л¬Ё - нв® «®ЈЁзҐбЄЁ Ў®«ҐҐ ўлб®ЄЁ© га®ўҐм
ў§ Ё¬®¤Ґ©бвўЁп Їа®жҐбб®ў, 祬 бЁеа®Ё§ жЁп.
ЋЎ¬Ґ ¤ л¬Ё Ґ ¬®¦Ґв Ўлвм ॠ«Ё§®ў ЎҐ§ бЁеа®Ё§ жЁЁ.
ЏаЁ н⮬ б।бвў бЁеа®Ё§ жЁЁ "ўбва Ёў овбп" ў б।бвў ®Ў¬Ґ
¤ л¬Ё в ЄЁ¬ ®Ўа §®¬, зв® ®Ё ®Є §лў овбп бЄалвл¬Ё ®в
Ї®«м§®ў ⥫п.
Џ®«м§®ў вҐ«о ЇаҐ¤®бв ў«пҐвбп Ї а ЇаЁ¬ЁвЁў®ў вЁЇ : SEND,
RECEIVE Ё«Ё READ, WRITE.
ЋЎ¬Ґ ¤ л¬Ё ¬®¦Ґв а бб¬ ваЁў вмбп ў ¤ўге бЇҐЄв е.
1) ®Ў¬Ґ Їа®Ёб室Ёв ¬Ґ¦¤г Їа®жҐбб ¬Ё, ўлЇ®«пойЁ¬Ёбп
®¤®© дЁ§ЁзҐбЄ®© ¬ иЁҐ;
2) ®Ў¬Ґ Їа®Ёб室Ёв ¬Ґ¦¤г Їа®жҐбб ¬Ё, ўлЇ®«пойЁ¬Ёбп
а §«Ёзле дЁ§ЁзҐбЄЁе ¬ иЁ е.
‚ ¤ ®¬ Ї а Ја дҐ ¬л а бᬮваЁ¬ ЇҐаўл© ў аЁ в ®Ў¬Ґ
¤ л¬Ё, а бб¬ ваЁў п б।бвў ®Ў¬Ґ Є Є ЇаЁ¬ЁвЁўл п¤а . Њл
гўЁ¤Ё¬, Єбв вЁ, зв® нвЁ ЇаЁ¬ЁвЁўл Ї®¤Ї ¤ ов Ї®¤ ®ЇаҐ¤Ґ«ҐЁҐ
Ї®пвЁп ЊЋЌ€’Ћђ, а бᬮв८Ґ ўлиҐ.
ЋЎ¬Ґг ¤ л¬Ё ў 楫®¬, б гзҐв®¬ ў®§¬®¦®бвЁ ўлЇ®«ҐЁп
ў§ Ё¬®¤Ґ©бвўгойЁе Їа®жҐбб®ў а §«Ёзле ¬ иЁ е, Ї®бўпйҐ
бЇҐжЁ «мл© а §¤Ґ«, а бб¬ ваЁў ойЁ© ў®б쬮© га®ўҐм Ў §®ў®©
Є« ббЁдЁЄ жЁЁ ®ЇҐа жЁ®®© б।л - га®ўҐм Є®¬¬гЁЄ жЁ©.
Љ Є Ё а ҐҐ, ¬л а бᬮваЁ¬ ¬®¤Ґ«Ё ®Ў¬Ґ ¤ л¬Ё, § ⥬
ЇаЁўҐ¤Ґ¬ ЇаЁ¬Ґал б।бвў ®Ў¬Ґ ¤ л¬Ё ў ॠ«мле ®ЇҐа жЁ®ле
б। е.
Ѓ §®ўл¬ б।бвў®¬ ®Ў¬Ґ ¤ л¬Ё ¬Ґ¦¤г Їа®жҐбб ¬Ё пў«пҐвбп
б।бвў®, §лў Ґ¬®Ґ ЎгдҐа®¬.
я23.10.1. ЃгдҐа Є Є б।бвў® Є®¬¬гЁЄ жЁЁ ¬Ґ¦¤г Їа®жҐбб ¬Ё
ЏаЁ ®аЈ Ё§ жЁЁ бўп§Ё ¬Ґ¦¤г Їа®жҐбб ¬Ё б Ї®¬®ймо «оЎ®Ј®
б।бвў вॡгҐвбп б®бв ўЁвм бЇҐжЁдЁЄ жЁо Є н⮬г б।бвўг.
‘ЇҐжЁдЁЄ жЁп ЎгдҐа Є Є б।бвў бўп§Ё ўлЈ«п¤Ёв б«Ґ¤гойЁ¬
®Ўа §®¬:
- б®®ЎйҐЁп ў ЎгдҐаҐ Ё¬Ґов дЁЄбЁа®ў л© а §¬Ґа;
- а §¬Ґа ЎгдҐа ®Ја ЁзҐ, ЎгдҐа - Є®«м楢®©;
- Ї®бл«Є б®®ЎйҐЁп ў Ї®«л© ЎгдҐа Ґ¤®ЇгбвЁ¬ ;
- з⥨Ґ б®®ЎйҐЁп Ё§ Їгбв®Ј® ЎгдҐа в Є¦Ґ Ґ¤®ЇгбвЁ¬ .
ЏҐаҐзЁб«Ёў гб«®ўЁп дгЄжЁ®Ёа®ў Ёп ЎгдҐа , ¬®¦® Ї®бва®Ёвм
ҐЈ® ®ЇЁб ЁҐ, а бб¬ ваЁў п ЎгдҐа ў ўЁ¤Ґ ¬®Ёв®а .
Type
PBuffer = ^TBuffer;
TBuffer = Object
n : [0..N]; {⥪г饥 Є®«ЁзҐбвў® б®®ЎйҐЁ© ў ЎгдҐаҐ}
in : [0..N-1]; {Ё¤ҐЄб п祩ЄЁ, ў Є®в®аго Їа®Ё§ў®¤Ёвбп}
{⥪гй п § ЇЁбм}
out : [0..N-1]; {Ё¤ҐЄб п祩ЄЁ, Ё§ Є®в®а®© Їа®Ё§ў®¤Ёвбп}
{⥪г饥 з⥨Ґ}
Buf : Array[0..N-1] Of TMessage;
RList : PList; {®зҐаҐ¤м Їа®жҐбб®ў, ¦¤гйЁе з⥨п}
WList : PList; {®зҐаҐ¤м Їа®жҐбб®ў, ¦¤гйЁе § ЇЁбЁ}
Constructor Init;
Destructor Done;
Procedure Write(M : TMessage);
Procedure Read(Var M : TMessage);
End {TBuffer};
‘奬 ЁбЇ®«м§®ў Ёп ЎгдҐа ўлЈ«п¤Ёв б«Ґ¤гойЁ¬ ®Ўа §®¬.
Var
B : PBuffer;
Begin
B := New(PBuffer, Init);
...
Dispose(B, Done);
End.
Џа®жҐбб 1: Џа®жҐбб 2:
Procedure Џа®Ё§ў®¤ЁвҐ«м; Procedure Џ®вॡЁвҐ«м;
Var Var
Message : TMessage; Message : TMessage;
Begin Begin
While True Do Begin While True Do Begin
... ...
‘д®а¬Ёа®ў вм(Message); B^.Read(Message);
B^.Write(Message); ЋЎа Ў®в вм(Message);
... ...
End {While}; End {While};
End {Џа®Ё§ў®¤ЁвҐ«м}; End {Џ®вॡЁвҐ«м};
–Ґ«мо ЁбЇ®«м§®ў Ёп ЎгдҐа ЇаЁ ®Ў¬ҐҐ ¤ л¬Ё ¬Ґ¦¤г
Їа®жҐбб ¬Ё пў«пҐвбп б®Ј« б®ў ЁҐ бЄ®а®б⥩ § ЇЁбЁ Ё з⥨п
Ёд®а¬ жЁЁ а §«Ёзл¬Ё Їа®жҐбб ¬Ё.
…б«Ё бЄ®а®бвЁ § ЇЁбЁ Ё звҐЁп ®¤Ё Є®ўл, в® аЁбг®Є
б®бв®пЁп ЎгдҐа Ўг¤Ґв ўлЈ«п¤Ґвм ЇаЁ¬Ґа® в Є:
ЪДДДДДДДДДДДДДДДДДДї
і і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і ДДДДДДДДД> out з⥨Ґ
ГДДДДДДДДДДДДДДДДДДґ (зЁв Ґ¬ Ё§ ЇҐаў®©
і//////////////////і § пв®© п祩ЄЁ)
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
‡ ЇЁбм in ДДДДДД> і і
(ЇЁиҐ¬ ў ЇҐаўго ГДДДДДДДДДДДДДДДДДДґ
бў®Ў®¤го п祩Єг) і і
АДДДДДДДДДДДДДДДДДДЩ
…б«Ё бЄ®а®бвм звҐЁп ЇаҐўли Ґв бЄ®а®бвм § ЇЁбЁ, в® б奬
б®бв®пЁп ЎгдҐа Ўг¤Ґв ўлЈ«п¤Ґвм б«Ґ¤гойЁ¬ ®Ўа §®¬.
ЪДДДДДДДДДДДДДДДДДДї
і і
ГДДДДДДДДДДДДДДДДДДґ
і і
ГДДДДДДДДДДДДДДДДДДґ
і і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і ДДДДДДДДД> out з⥨Ґ
ГДДДДДДДДДДДДДДДДДДґ
‡ ЇЁбм in ДДДДДД> і і out -> in
ГДДДДДДДДДДДДДДДДДДґ
і і
АДДДДДДДДДДДДДДДДДДЩ
’.Ґ. ЎгдҐа Ўг¤Ґв Ў®«м襥 ўаҐ¬п Їгбвл¬, 祬 § пвл¬,
Їа®жҐбб, зЁв ойЁ© Ё§ ЎгдҐа , Ўг¤Ґв ¦¤ вм § ЇЁбЁ.
…б«Ё бЄ®а®бвм § ЇЁбЁ ЇаҐўли Ґв бЄ®а®бвм з⥨п, в® б奬
б®бв®пЁп ЎгдҐа Ўг¤Ґв ўлЈ«п¤Ґвм б«Ґ¤гойЁ¬ ®Ўа §®¬.
ЪДДДДДДДДДДДДДДДДДДї
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
‡ ЇЁбм in ДДДДДД> і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
in -> out і//////////////////і ДДДДДДДДД> out з⥨Ґ
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
ГДДДДДДДДДДДДДДДДДДґ
і//////////////////і
АДДДДДДДДДДДДДДДДДДЩ
’.Ґ. ЎгдҐа Ўг¤Ґв Ў®«м襥 ўаҐ¬п Ї®«л¬, 祬 бў®Ў®¤л¬,
Їа®жҐбб, § ЇЁблў ойЁ© ў ЎгдҐа, Ўг¤Ґв ¦¤ вм з⥨п.
ђ ᯨ襬 ⥯Ґам ¬Ґв®¤л ¬®Ёв®а Ѓ“”…ђ.
Constructor TBuffer.Init;
Begin
n := 0;
in := 0;
out := 0;
RList := New(PList, Init);
WList := New(PList, Init);
End {TBuffer.Init};
Destructor TBuffer.Done;
Begin
Dispose(RList, Done);
Dispose(WList, Done);
End {TBuffer.Done};
Procedure TBuffer.Write(M : TMessage);
Begin
‡ ЇаҐв ЇаҐалў Ё©;
If n = N Then Begin {ЎгдҐа Ї®«®}
WList^.Insert(’ҐЄгйЁ© Їа®жҐбб); {¦¤Ґ¬ § ЇЁбЁ}
Џ…ђ…ЌЂ‡ЌЂ—€’њ ЏђЋ–…‘‘Ћђ;
End {If};
Inc(n);
Buf[in] := M;
in := (in + 1) MOD N;
If RList Ґ Їгбв п Then Begin { ЄвЁўЁ§ жЁп ¦¤г饣® з⥨п}
ЋзҐаҐ¤м_Ј®в®ўле.Insert(’ҐЄгйЁ© Їа®жҐбб);
WList^.Remove(ЏҐаўл© Їа®жҐбб);
ЏҐаҐ¤ вм гЇа ў«ҐЁҐ(’ҐЄгйЁ© Їа®жҐбб, ЏҐаўл© Їа®жҐбб);
End {If};
ђ §аҐиҐЁҐ ЇаҐалў Ё©;
End {TBuffer.Write};
Procedure TBuffer.Read(Var M : TMessage);
Begin
‡ ЇаҐйҐЁҐ ЇаҐалў Ё©;
If n = 0 Then Begin
RList^.Insert(’ҐЄгйЁ© Їа®жҐбб); {¦¤Ґ¬ з⥨п}
Џ…ђ…ЌЂ‡ЌЂ—€’њ ЏђЋ–…‘‘Ћђ;
End {If};
Dec(n);
M := Buf[out];
out := (out + 1) MOD N;
If WList Ґ Їгбв п Then Begin { ЄвЁўЁ§ жЁп ¦¤г饣® § ЇЁбЁ}
ЋзҐаҐ¤м_Ј®в®ўле.Insert(’ҐЄгйЁ© Їа®жҐбб);
RList^.Remove(ЏҐаўл© Їа®жҐбб);
ЏҐаҐ¤ вм гЇа ў«ҐЁҐ(’ҐЄгйЁ© Їа®жҐбб, ЏҐаўл© Їа®жҐбб);
End {If};
ђ §аҐиҐЁҐ ЇаҐалў Ё©;
End {TBuffer.Read};
я2‚лў®¤л
1) ‚ҐиҐ а Ў®в б ЎгдҐа®¬ Ї®¬Ё Ґв а Ў®вг б д ©«®¬:
‘®§¤ вм; ‡ ЇЁб вм; Џа®зЁв вм; ђ §агиЁвм;
ђ Ў®в «оЎле б।бвў ®Ў¬Ґ ¤ л¬Ё Ї®е®¦ нвЁ ¤Ґ©бвўЁп.
2) „ўҐ ®зҐаҐ¤Ё Їа®жҐбб®ў ЁбЇ®«м§говбп ў Є зҐб⢥ б।бвў
бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё з⥨п.
‚¬Ґбв® ЇаאַЈ® ЁбЇ®«м§®ў Ёп ®зҐаҐ¤Ґ© ¬®Јгв
ЁбЇ®«м§®ў вмбп ᥬ д®ал. ‚ н⮬ б«гз Ґ г¦ Ї а ᥬ д®а®ў,
Є®в®алҐ Ё¬Ґов б¬лб« "Ќ…_Џ“‘’" Ё "Ќ…_ЏЋ‹ЋЌ".
Љ®Ј¤ Їа®жҐбб ЇЁиҐв б®®ЎйҐЁҐ ў ЎгдҐа, ® ®Є §лў Ґвбп
Ї®«л¬, Їа®жҐбб ўлЇ®«пҐв ®ЇҐа жЁо Ќ…_ЏЋ‹ЋЌ.ђ.
…б«Ё ЎгдҐа Ґ Ї®«® Ё ®ЇҐа жЁп § ЇЁбЁ Їа®и« гбЇҐи®, в®
Їа®жҐбб ўлЇ®«пҐв ®ЇҐа жЁо Ќ…_Џ“‘’.V, ЄвЁўЁ§Ёагп зЁв ойЁ©
Їа®жҐбб, ¦¤гйЁ© § ЇЁбЁ.
Љ®Ј¤ Їа®жҐбб зЁв Ґв б®®ЎйҐЁҐ Ё§ ЎгдҐа , ® ®Є §лў Ґвбп
Їгбвл¬, Їа®жҐбб ўлЇ®«пҐв ®ЇҐа жЁо Ќ…_Џ“‘’.ђ.
…б«Ё ЎгдҐа Ґ Їгбв Ё ®ЇҐа жЁп звҐЁп Їа®и« гбЇҐи®, в®
Їа®жҐбб ўлЇ®«пҐв ®ЇҐа жЁо Ќ…_ЏЋ‹ЋЌ_V, ЄвЁўЁ§Ёагп ЇЁигйЁ©
Їа®жҐбб, ¦¤гйЁ© з⥨п.
3) ЌҐ¤®бв вЄ ¬Ё ЎгдҐа пў«повбп:
- дЁЄбЁа®ў л© а §¬Ґа;
- ॠ«м п ЇҐаҐ§ ЇЁбм ¤ ле ў ЎгдҐа Ё Ё§ ЎгдҐа .
‘«Ґ¤гойЁ© ¬Ґв®¤ ®Ў¬Ґ ¤ л¬Ё гбва пҐв Ґ¤®бв вЄЁ ЎгдҐа .
я23.10.2. Џ®зв®ўл© пйЁЄ б ®зҐаҐ¤мо б®®ЎйҐЁ©
“бва ҐЁп Ґ¤®бв вЄ ЎгдҐа , § Є«оз о饣®бп ў дЁЄбЁа®ў ®¬
ҐЈ® а §¬ҐаҐ, гбва пҐвбп Їг⥬ ЁбЇ®«м§®ў Ёп ¤Ё ¬ЁзҐбЄ®Ј®
®ЎкҐЄв - ®зҐаҐ¤Ё б®®ЎйҐЁ©.
“бва ҐЁҐ Ґ¤®бв вЄ ЎгдҐа , § Є«оз о饣®бп ў ॠ«м®©
ЇҐаҐ§ ЇЁбЁ ¤ ле, гбва пҐвбп Їг⥬ Ї®¬ҐйҐЁп ў ®зҐаҐ¤м
гЄ § ⥫Ґ© б®®ЎйҐЁп, Ґ б ¬Ёе б®®ЎйҐЁ©.
‚ Є зҐб⢥ б।бвў бЁеа®Ё§ жЁЁ § ЇЁбЁ Ё звҐЁп Ї®-ЇаҐ¦Ґ¬г
Ўг¤Ґ¬ ЁбЇ®«м§®ў вм ®зҐаҐ¤Ё Їа®жҐбб®ў.
ЋЇЁиҐ¬ ®ЎкҐЄв, 㤮ў«Ґвў®апойЁ© ЇаЁўҐ¤Ґ®© ўлиҐ
бЇҐжЁдЁЄ жЁЁ, Ё §®ўҐ¬ ҐЈ® я2Ї®зв®ўл¬ пйЁЄ®¬.
Type
PPostBox = ^TPostBox;
TPostBox = Object
TList : PList; {®зҐаҐ¤м Їа®жҐбб®ў, Ї®б« ўиЁе б®®ЎйҐЁҐ}
RList : PList; {®зҐаҐ¤м Їа®жҐбб®ў, ¦¤гйЁе б®®ЎйҐЁп}
MList : PList; {®зҐаҐ¤м гЄ § ⥫Ґ© б®®ЎйҐЁп}
Constructor Init;
Destructor Done;
Procedure PutMsg(M : Pointer);
Procedure GetMsg(Var M : Pointer);
End {TPostBox};
я2‡ ¬Ґз Ёп
1) ‘奬 ЁбЇ®«м§®ў Ёп Ї®зв®ў®Ј® пйЁЄ ў ЇаЁЄ« ¤®©
Їа®Ја ¬¬Ґ «®ЈЁз б奬Ґ ЁбЇ®«м§®ў Ёп ЎгдҐа .
2) €§ ¤ўге ®зҐаҐ¤Ґ© - Їа®жҐбб®ў, Ї®б« ўиЁе б®®ЎйҐЁҐ, Ё
Їа®жҐбб®ў, ¦¤гйЁе б®®ЎйҐЁҐ, ў Їа®Ё§ў®«мл© ¬®¬Ґв ўаҐ¬ҐЁ
бгйҐбвўгҐв в®«мЄ® ®¤ .
3) Џа®жҐббл, ҐбвҐб⢥®, § ов вЁЇ б®®ЎйҐЁ© Є Є вЁЇ
¤ ле.
‘onstructor TPostBox.Init;
Begin
RList := New(PList, Init);
TList := New(PList, Init);
MList := New(PList, Init);
End {TPOstBox.Init};
Destructor TPostBox.Done;
Begin
Dispose(RList, Done);
Dispose(TList, Done);
Dispose(MList, Done);
End {TPostBox.Done};
Procedure TPostBox.PutMsg(M : Pointer);
Begin
‡ ЇаҐв ЇаҐалў Ё©;
MList^.Insert(M);
TList^.Insert(’ҐЄгйЁ© Їа®жҐбб);
If RList Ґ Їгбв Then
RList^.Remove(ЏҐаўл© Їа®жҐбб)
Else
ЋзҐаҐ¤м_Ј®в®ўле.Remove(ЏҐаўл© Їа®жҐбб);
ЏҐаҐ¤ вм гЇа ў«ҐЁҐ(’ҐЄгйЁ© Їа®жҐбб, ЏҐаўл© Їа®жҐбб);
ђ §аҐиҐЁҐ ЇаҐалў Ё©;
End {TPostBox.PutMsg};
Procedure TPostBox.GetMsg(Var M : Pointer);
Begin
‡ ЇаҐйҐЁҐ ЇаҐалў Ё©;
If MList Їгбв Then Begin
RList^.Insert(’ҐЄгйЁ© Їа®жҐбб); {¦¤Ґ¬ § ЇЁбЁ}
Џ…ђ…ЌЂ‡ЌЂ—€’њ ЏђЋ–…‘‘Ћђ;
End {If};
MList^.Remove(ЏҐаў®Ґ б®®ЎйҐЁҐ);
M := ЏҐаў®Ґ б®®ЎйҐЁҐ;
Tlist^.Remove(ЏҐаўл© Їа®жҐбб);
ЋзҐаҐ¤м_Ј®в®ўле.Insert(’ҐЄгйЁ© Їа®жҐбб);
ЏҐаҐ¤ вм гЇа ў«ҐЁҐ(’ҐЄгйЁ© Їа®жҐбб, ЏҐаўл© Їа®жҐбб);
ђ §аҐиҐЁҐ ЇаҐалў Ё©;
End {TPostBox.GetMsg};
ЏаЁўҐ¤ҐлҐ ЇаЁ¬ЁвЁўл а Ў®в ов б«Ґ¤гойЁ¬ ®Ўа §®¬.
ЏаҐ¤Ї®«®¦Ё¬, зв® ЇҐаўл¬ Є ЇаЁ¬ЁвЁўг Ї®зв®ў®Ј® пйЁЄ Ї®¤®©¤Ґв
Їа®жҐбб, § ЇЁблў ойЁ© б®®ЎйҐЁҐ.
Ћ Ї®¬Ґй Ґв ҐЈ® ў ®зҐаҐ¤м б®®ЎйҐЁ©, б ¬ ўбв Ґв ў ®зҐаҐ¤м
Їа®жҐбб®ў, Ї®б« ўиЁе б®®ЎйҐЁҐ.
Џа®жҐбб, Ї®¤®иҐ¤иЁ© ўв®ал¬ Є ЇаЁ¬ЁвЁўг з⥨п б®®ЎйҐЁп,
бзЁвлў Ґв ҐЈ® Ё§ ®зҐаҐ¤Ё б®®ЎйҐЁ© Ё ЄвЁўЁ§ЁагҐв Їа®жҐбб,
Ї®б« ўиЁ© ҐЈ®.
’ҐЇҐам ЇаҐ¤Ї®«®¦Ё¬, зв® ЇҐаўл¬ Є ЇаЁ¬ЁвЁўг Ї®зв®ў®Ј® пйЁЄ
Ї®¤®©¤Ґв Їа®жҐбб, зЁв ойЁ© б®®ЎйҐЁҐ.
Ћ Їа®ўҐапҐв «ЁзЁҐ б®®ЎйҐЁ© ў ®зҐаҐ¤Ё б®®ЎйҐЁ© Ё ЇаЁ Ёе
®вбгвбвўЁЁ Ў«®ЄЁагҐвбп ў ®зҐаҐ¤Ё ¦¤гйЁе б®®ЎйҐЁҐ.
Џа®жҐбб, Ї®¤®иҐ¤иЁ© ўв®ал¬ Є ЇаЁ¬ЁвЁўг § ЇЁбЁ б®®ЎйҐЁп,
Ї®¬Ґй Ґв б®®ЎйҐЁҐ ў ®зҐаҐ¤м, б ¬ ўбв Ґв ў ®зҐаҐ¤м Їа®жҐбб®ў,
Ї®б« ўиЁе б®®ЎйҐЁҐ, Ё ЄвЁўЁ§ЁагҐв Їа®жҐбб Ё§ ®зҐаҐ¤Ё Їа®жҐбб®ў,
¦¤гйЁе б®®ЎйҐЁҐ. ЂЄвЁўЁ§Ёа®ў л© Їа®жҐбб бзЁвлў Ґв б®®ЎйҐЁҐ Ё
ЄвЁўЁ§ЁагҐв Їа®жҐбб, Ї®б« ўиЁ© ҐЈ®.
’ Є®© бЇ®б®Ў ®Ў¬Ґ б®®ЎйҐЁп¬Ё, Є®Ј¤ ЇҐаҐ¤ ойЁ© Їа®жҐбб
Ў«®ЄЁагҐвбп, Ї®Є ҐЈ® б®®ЎйҐЁҐ Ґ Ўг¤Ґв ЇаЁпв® ЇаЁЁ¬ ойЁ¬
Їа®жҐбᮬ, §лў Ґвбп ђЂЌ„…‚“. ќв®в ¬Ґе Ё§¬ ॠ«Ё§®ў ў п§лЄҐ
Ђ„Ђ.
Соседние файлы в папке Конспект лекций для групп АСОИУ