Salut, décidément ces fichus thread me portent la poisse je n'arrive décidement rien à en tirer qui fonctionne convenablement . Je m'explique, dans mon scanner de port j'ai 5 threads qui chacun scannent un intervalle de ports donnés.Par exemple, je lance mon appli, je lance un scan, la barre de progression avance et quand sa se fini plus rien ne se passe : aucun bug, aucun rapport de scan, l'application ne gèle pas... je ne comprend pas ce qui se passe

Code d'un des threads
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
Procedure TThread1.UpdateBar;
begin
MainForm.bar.Position := MainForm.Bar.Position + 1;
end;
 
Procedure TThread1.UpdateList;
begin
MainForm.Portlist.Items.Add.Caption := ListPorts1[j];
MainForm.Portlist.Items.Item[MainForm.Portlist.Items.Count - 1].SubItems.Add(ListOpen1[j]);
MainForm.Portlist.ItemIndex := MainForm.Portlist.Items.Count - 1;
end;
 
 
procedure TThread1.Execute;
var
i,k : integer;
begin
    FreeOnTerminate := False;
    Priority := tpNormal;
 
 
    ListPorts1 := TStringList.Create;
    ListOpen1 := TStringList.create;
    ListPorts1.Clear;
    ListOpen1.Clear;
 
    If Ports1 <=0 then Begin Finished1 := true; Exit; End;
    Finished1 := false;
 
    For i:= PDebut to PDebut+Ports1 do
    begin
      listPorts1.add(IntToStr(i));
      If not Scanning then break;
       Try
         Synchronize(Thread1,UpdateBar);
         MainForm.TCP1.Port := i;
         MainForm.TCP1.Connect(100);
         listOpen1.Add('Ouvert');
       Except
         listOpen1.Add('Fermé');
       end;
     // MainForm.TCP1.disconnect
       end;
    Finished1 := true;
 
    If Scanning then
    begin
      For k := 0 to ListPorts1.Count-1 do
      begin
      j := k;
        Synchronize(Thread1,UpdateList);
      end;
    end;
   ListPorts1.Free;
   ListOpen1.Free;
end;
Si vous avez des propisitons... je suis preneur