Dans ce cas, je ne vois presque aucun intérêt à utiliser une TObjectList, car il faudra toujours caster un TObject en TThread, ce qui ne change rien de caster un Pointer en TThread ...
Ensuite, conserver les Thread en FreeOnTerminate à true, c'est s'exposé à des violations d'accès sur un thread qui a terminé son execution, ... et si l'on veut gérer leur arrêt, vaut mieux FreeOnTerminate à false, et faire soit même Terminate, WaitFor et Free ...
sinon pour éclairer necralbert, ton erreur est simplement une méconnaissance de l'objet
la forme est toujours
Instance := Class.Create();
ce que tu as bien fait pour IpToTest
Ensuite, même si avec des objets, le passage par pointeur n'est pas utile, il est bon de rapperl Chaque New doit avoir son Dispose, par exemple faire sa propre List comme ceci pour typé fortement sa liste est simplifier son utilisation
dans l'exemple qui suit, TModeleType peut être une chaine, un entier, une structure.
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| unit uModeleTypeList;
interface
uses Classes;
type
TModeleType = Double; // A Titre d'Exemple ...
PModeleType = ^TModeleType;
TModeleTypeList = class(TList)
protected
function GetItem(const Index: Integer): TModeleType;
procedure SetItem(const Index: Integer; const Value: TModeleType);
public
function Add(const AModeleType: TModeleType): Integer;
procedure Clear; override;
procedure Delete(const Index: Integer);
procedure Insert(const Index: Integer; const AModeleType: TModeleType);
function First: TModeleType;
function Last: TModeleType;
// Propriétés
property Items[const Index: Integer]: TModeleType read GetItem write SetItem; default;
end;
implementation
// TModeleTypeList ---------------------------------------------------------------
// -
// TModeleTypeList - Protected -
// -
// TModeleTypeList ---------------------------------------------------------------
// TModeleTypeList - Protected ---------------------------------------------------
function TModeleTypeList.GetItem(const Index: Integer): TModeleType;
begin
// On veut une Structure ModeleType, et n'ont pas un pointeur, donc déférencement (^)
Result := PModeleType(inherited Items[Index])^;
end;
// TModeleTypeList - Protected ---------------------------------------------------
procedure TModeleTypeList.SetItem(const Index: Integer; const Value: TModeleType);
begin
// On veut une Structure ModeleType, et n'ont pas un pointeur, donc déférencement (^)
PModeleType(inherited Items[Index])^ := Value;
end;
// TModeleTypeList ---------------------------------------------------------------
// -
// TModeleTypeList - Public -
// -
// TModeleTypeList ---------------------------------------------------------------
// TModeleTypeList - Public ------------------------------------------------------
function TModeleTypeList.Add(const AModeleType: TModeleType): Integer;
var
TmpModeleType: PModeleType;
begin
New(TmpModeleType);
TmpModeleType^ := AModeleType;
Result := inherited Add(TmpModeleType);
end;
// TModeleTypeList - Public ------------------------------------------------------
procedure TModeleTypeList.Clear;
var
Index: Integer;
begin
for Index := Count - 1 downto 0 do begin
if Assigned(inherited Items[Index]) then begin
Dispose(PModeleType(inherited Items[Index]));
end;
end;
inherited Clear();
end;
// TModeleTypeList - Public ------------------------------------------------------
procedure TModeleTypeList.Delete(const Index: Integer);
begin
Dispose(PModeleType(inherited Items[Index]));
inherited Delete(Index);
end;
// TModeleTypeList - Public ------------------------------------------------------
procedure TModeleTypeList.Insert(const Index: Integer; const AModeleType: TModeleType);
var
TmpModeleType: PModeleType;
begin
New(TmpModeleType);
TmpModeleType^ := AModeleType;
inherited Insert(Index, TmpModeleType);
end;
// TModeleTypeList - Public ------------------------------------------------------
function TModeleTypeList.First: TModeleType;
begin
// On veut un ModeleType, et n'ont pas un pointeur, donc déférencement (^)
Result := PModeleType(inherited First())^;
end;
// TModeleTypeList - Public ------------------------------------------------------
function TModeleTypeList.Last: TModeleType;
begin
// On veut un ModeleType, et n'ont pas un pointeur, donc déférencement (^)
Result := PModeleType(inherited Last())^;
end;
end. |
Partager