Et où est-elle remplie ?
Version imprimable
Et où est-elle remplie ?
Dans le constructeur, car il ressemble à ça :
et le type TTableau est déclaré dans une autre Unité.Code:constructor Create(uneListe:ttableau);
Tu ne reseterais pas ton tableau directement après ThreadFlux.Create() par hasard ?
Voilà précisemment ce que je fait :)Code:
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 constructor tThreadflux.Create(uneListe: ttableau); var i:integer; begin inherited Create(false); setlength(lst.t,length(uneliste.t)); //initialisation des variables for i := 0 to length(uneliste.t) - 1 do begin Lst.t[i]:=uneListe.t[i]; end; Priority := tpNormal; end; procedure TThreadFlux.Execute; begin for i := 0 to length(Lst.t) - 1 do begin monurl:=Lst.t[i]; with TIdHTTP.Create(nil) do try monurl:=Lst.t[i]; source := Get(monurl); finally Free; end; TraitementFlux(source); end; end;
Quel est l'intérêt d'utiliser un thread alors que tu vas traiter séquentiellement tes url ? :koi:
Autant le faire directement dans un code simple non ?
Parce qu'en fait je souhaite créé un service qui se lance tous les jours à une heure donnée (dans un fichier de config).
La question était sur: après l'instantiation du thread et non pas son constructeur ;).
Maintenant, essaye de remplacer cette ligne:
par:Code:Lst.t[i]:=uneListe.t[i];
SetString va effectivement copier la chaîne et non pas seulement son pointer ;).Code:SetString(Lst.t[i], PChar(uneListe.t[i]), Length(uneListe.t[i]));
ps: Mais comme dit Rayek, le principe est peut-être discutable.