Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Реферат - Потоки / lab4thread2 / primcemafor / Unit1
.pas unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMainForm = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure SomeDo(sender:tobject);
end;
tfoothread=class(tthread)
protected
procedure Execute;override;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
const n=128;
var next:integer=0;
df:integer=0;
ar:array[1..n]of integer;
sem:thandle=0;
function getnumber:integer;
begin
result:=next;
inc(next);
end;
procedure TFoothread.Execute;
var i:integer;
wr:dword;
begin
onterminate:=mainform.SomeDo;
wr:=waitforsingleobject(sem,infinite);
if wr=wait_object_0 then
begin
for i:=1 to n do
begin
ar[i]:=getnumber;
sleep(5);
end;
releasesemaphore(sem,1,nil);
end;
end;
procedure tMainForm.SomeDo(sender:tobject);
var i:integer;
begin
inc(df);
if df=2 then
begin
for i:=1 to n do
listbox1.Items.Add(inttostr(ar[i]));
closehandle(sem);
end;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
sem:=createsemaphore(nil,1,1,nil);
tfoothread.Create(false);
tfoothread.Create(false);
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMainForm = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure SomeDo(sender:tobject);
end;
tfoothread=class(tthread)
protected
procedure Execute;override;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
const n=128;
var next:integer=0;
df:integer=0;
ar:array[1..n]of integer;
sem:thandle=0;
function getnumber:integer;
begin
result:=next;
inc(next);
end;
procedure TFoothread.Execute;
var i:integer;
wr:dword;
begin
onterminate:=mainform.SomeDo;
wr:=waitforsingleobject(sem,infinite);
if wr=wait_object_0 then
begin
for i:=1 to n do
begin
ar[i]:=getnumber;
sleep(5);
end;
releasesemaphore(sem,1,nil);
end;
end;
procedure tMainForm.SomeDo(sender:tobject);
var i:integer;
begin
inc(df);
if df=2 then
begin
for i:=1 to n do
listbox1.Items.Add(inttostr(ar[i]));
closehandle(sem);
end;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
sem:=createsemaphore(nil,1,1,nil);
tfoothread.Create(false);
tfoothread.Create(false);
end;
end.
Соседние файлы в папке primcemafor