ВУЗ:
Составители:
Рубрика:
19
procedure ButtonlClick(Sender: TObject);
private
procedure ThreadsDone(Sender: TObject);
end;
TFooThread = class(TThread)
protected
procedure Execute; override;
end;
var
MainForm: TMainForm;
implementation
{ $R *.DFM}
const
MaxSize = 128;
var
NextNumber: Integer = 0;
DoneFlags: Integer = 0;
GlobalArray: array[1..MaxSize] of Integer;
CS: TCriticalSection;
function GetNextNumber: Integer;
begin
Result := NextNumber;
inc(NextNumber);
end;
procedure TFooThread.Execute;
var
i: Integer;
begin
OnTerminate : = MainForm.ThreadsDone;
CS.Enter; // Начало критического раздела
try
for i := 1 to MaxSize do
begin
GlobalArray[i] := GetNextNumber;
Sleep(5);
end;
finally
CS.Leave; // Конец критического раздела
end;
end;
procedure TMainForm.ThreadsDone(Sender: TObject);
var
i: Integer;
begin
inc(DoneFlags);
if DoneFlags = 2 then
begin
for i := 1 to MaxSize do
Listboxl.Items.Add(IntToStr(GlobalArray[i]));
19 procedure ButtonlClick(Sender: TObject); private procedure ThreadsDone(Sender: TObject); end; TFooThread = class(TThread) protected procedure Execute; override; end; var MainForm: TMainForm; implementation { $R *.DFM} const MaxSize = 128; var NextNumber: Integer = 0; DoneFlags: Integer = 0; GlobalArray: array[1..MaxSize] of Integer; CS: TCriticalSection; function GetNextNumber: Integer; begin Result := NextNumber; inc(NextNumber); end; procedure TFooThread.Execute; var i: Integer; begin OnTerminate : = MainForm.ThreadsDone; CS.Enter; // Начало критического раздела try for i := 1 to MaxSize do begin GlobalArray[i] := GetNextNumber; Sleep(5); end; finally CS.Leave; // Конец критического раздела end; end; procedure TMainForm.ThreadsDone(Sender: TObject); var i: Integer; begin inc(DoneFlags); if DoneFlags = 2 then begin for i := 1 to MaxSize do Listboxl.Items.Add(IntToStr(GlobalArray[i]));
Страницы
- « первая
- ‹ предыдущая
- …
- 17
- 18
- 19
- 20
- 21
- …
- следующая ›
- последняя »