N
Neubcoder
3 потока вызываемые один в момент выполнения другого. Почему выолняются последовательно (начиная от последнего запущенного) а не одновременно. В чём ошибка?
ВОТ КОД:
type
shit = class(TThread)
private
d:Tidhttp;
protected
procedure execute;override;
procedure dofack;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
IdHTTP1: TIdHTTP;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure s1;
procedure s2;
procedure s3;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
threadvar who:byte;
w1,w2,w3:integer;
implementation
{$R *.dfm}
procedure shit.execute;
begin
synchronize(dofack);
end;
procedure shit.dofack;
var cycle:integer;
begin
for cycle:=1 to 15000 do begin
if who=1 then begin w1:=cycle;synchronize(form1.s1);end else
if who=2 then begin w2:=cycle;synchronize(form1.s2);end else
if who=3 then begin w3:=cycle;synchronize(form1.s3);end;
end;
end;
procedure tform1.s1;
begin
application.ProcessMessages;
form1.Button1.Caption:=inttostr(w1);
end;
procedure tform1.s2;
begin
application.ProcessMessages;
form1.Button2.Caption:=inttostr(w2);
end;
procedure tform1.s3;
begin
application.ProcessMessages;
form1.Button3.Caption:=inttostr(w3);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
who:=1;
shit.Create(false);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
who:=2;
shit.Create(false);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
who:=3;
shit.Create(false);
end;
ВОТ КОД:
type
shit = class(TThread)
private
d:Tidhttp;
protected
procedure execute;override;
procedure dofack;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
IdHTTP1: TIdHTTP;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure s1;
procedure s2;
procedure s3;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
threadvar who:byte;
w1,w2,w3:integer;
implementation
{$R *.dfm}
procedure shit.execute;
begin
synchronize(dofack);
end;
procedure shit.dofack;
var cycle:integer;
begin
for cycle:=1 to 15000 do begin
if who=1 then begin w1:=cycle;synchronize(form1.s1);end else
if who=2 then begin w2:=cycle;synchronize(form1.s2);end else
if who=3 then begin w3:=cycle;synchronize(form1.s3);end;
end;
end;
procedure tform1.s1;
begin
application.ProcessMessages;
form1.Button1.Caption:=inttostr(w1);
end;
procedure tform1.s2;
begin
application.ProcessMessages;
form1.Button2.Caption:=inttostr(w2);
end;
procedure tform1.s3;
begin
application.ProcessMessages;
form1.Button3.Caption:=inttostr(w3);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
who:=1;
shit.Create(false);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
who:=2;
shit.Create(false);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
who:=3;
shit.Create(false);
end;