Bonjour, comme explicité dans le titre j'ai un problème de multi-threading à savoir que j'ai normalement 3 threads (VCL) qui doivent s'executer en meme temps sauf que ceux-ci s'executent les uns aprés les autres...
Mes trois threads sont construits de la meme façon:
[code]
type
Threadping = class(TThread)
private
procedure ping;
public
constructor Create(CreateSuspended:boolean);
protected
procedure Execute; override;
end;
implementation
constructor Threadping.Create(CreateSuspended:boolean);
begin
inherited Create(CreateSuspended);
FreeOnTerminate:=true;
Priority:=tpNormal;
end;
procedure Threadping.ping;
var
part1,part2,part3,part4,count:integer;
begin
count:=0;
form1.memo2.lines.add('thread1');
part1:=posip(form1.edit1.Text,1);
part2:=posip(form1.edit1.Text,2);
part3:=posip(form1.edit1.Text,3);
part4:=posip(form1.edit1.Text,4)-2;
repeat
inc(count);
inc(count);
application.processmessages;
form1.Label13.Caption:=inttostr(count)+'/'+inttostr(nombrehost);
inc(part4);
inc(part4);
if part4>=254 then
begin
inc(part3);
part4:=1;
if part3>=254 then
begin
part3:=1;
inc(part2);
if part2>=254 then
begin
part2:=1;
inc(part1);
end;
end;
end;
form1.label10.Caption:=inttostr(part1)+'.'+inttostr(part2)+'.'+inttostr(part3)+'.'+inttostr(part4)+'t1';
form1.clping.Host:=inttostr(part1)+'.'+inttostr(part2)+'.'+inttostr(part3)+'.'+inttostr(part4);
form1.clping.ReceiveTimeout:=strtoint(form1.edit4.text);
try
form1.clping.Ping;
if form1.clping.replystatus.BytesReceived>0 then
begin
form1.Memo1.Lines.Add(inttostr(part1)+'.'+inttostr(part2)+'.'+inttostr(part3)+'.'+inttostr(part4));
form1.edit5.Text:=inttostr(form1.Memo1.lines.count);
end;
except
end;
until count>=nombrehost;
end;
procedure Threadping.Execute;
begin
Sleep(500);
synchronize(ping);
end;
[/code]
Mes threads sont créés de cette facon:
[code]
procedure TForm1.Label6Click(Sender: TObject);
var
Thping:Threadping;
thping2:threadping2;
begin
thping:=threadping.Create(false);
thping2:=threadping2.Create(false);
end;
[/code]
Ce que je ne comprends pas c'est que les procedures appelées par Synchronize s'executent bien en meme temps mais une fois que le dernier thread est créé c'est lui qui prend la main et les autres sont bloqués le temps que la procedure soit terminée, bref l'utilisation des threads n'a plus aucun interet...
En esperant avoir été assez clair et que quelqu'un pourra m'aider, merci.