N thread ou 1 seul

keyser-08 Messages postés 9 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 22 novembre 2004 - 28 oct. 2004 à 13:46
keyser-08 Messages postés 9 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 22 novembre 2004 - 28 oct. 2004 à 16:01
bonjour à tous, je commence à programmer en incorporant des threads je voudrai savoir si avec le code suivant, je faisait n thread ou alors je n'en faisait qu'un seul

for i := 0 to n do
begin
LigneActif:=i;
NewThread := TTestThread.Create(False);
end;

je veuts créer n thread, qui sont quasiment identique, il varie seulement par rapport à la valeur de "LigneActif".
Je sais pas si j'ai été très clair

++

3 réponses

cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 octobre 2006 1
28 oct. 2004 à 15:38
Ben a mon avis là tu creer n thread, mais le problem c'est qu'avec ce code tu perd la faculté d'acceder aux threads de 0 à n-1 car a chaques fois tu les met dans le met objet ( là c'est moi qui m'exprime pas bien ^^' )

bouh
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
28 oct. 2004 à 15:46
Salut,

Premierement avec ton code, tu crées n+1 Threads et non pas n.
Et effectivement tu ne pourras pas accéder à tes threads puisque NewThread contiendra l'adresse du dernier thread créé.
Donc pour libérer tout ça, c'est pas trop la bonne méthode.

Donc tu peux utiliser un Tlist par exemple en indexant à l'aide de ta variable de boucle i.

j!nH
0
keyser-08 Messages postés 9 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 22 novembre 2004
28 oct. 2004 à 16:01
tout d'abord merci pour vos réponses

Je crois avoir compris (j'ai du mal parfois :) ) , en fait je pourrai pas gérer les threads, c'est ça ???

C'est vrai que je crée n+1 thread c'est parce que j'ai mal recopier mon code j'avis mis n-1 d'ou le n thread créé, oops %-6

en fait voila mon thread

procedure TTestThread.Execute;
var LThread  : integer;
begin
 
   FreeOnTerminate := True;
   LThread := LigneActif;
   Tester(LThread);

end;

Procedure TTestThread.Tester(LThread : integer);
var dossier : string;
begin

Form1.IdFTPThread.Username:=IpList.Items[LThread].caption;
Form1.IdFTPThread.Password:=IpList.Items[LThread].SubItems[0];

 if Form1.IdFTPThread.Connected then Form1.IdFTPThread.Disconnect;

   dossier:= IpList.Items[LThread].SubItems[2];
   Form1.IdFTPThread.Host:=IpList.Items[LThread].SubItems[1];
     try
       Form1.IdFTPThread.Connect;
       Form1.IdFTPThread.ChangeDir(dossier);
       Form1.listbox1.Items.Clear;
       Form1.IdFTPThread.List(Form1.listbox1.Items);
       Iplist.Items[LThread].SubItems[3]:='Ok';

    except
   
      Iplist.Items[LThread].SubItems[3]:='Impossible de se connecter';

    end;

end;

IpList est un listview
IdFTPThread est un IdFTP

je voudrai en fait qu'il se connecte à tous les servers FTP en même temps, sachant que les user, login et host sont dans le listview IpList et que le nombre de ligne du listview est variable ( n ligne)

je sais pas trop comment faire , je suis perdu :blush)
0
Rejoignez-nous