la ThreadList comment ça marche
je n'ai pas d'exemple, je vais te mettre des extrait de codes
Code:
1 2 3
| // - Liste d'attente des Messages en Attente
TreatMessageThreadLst := TThreadList.Create();
TreatMessageThreadLst.Duplicates := dupAccept; |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| var
PhysicalStateData : _STRUCT_RTXTOOAM_BINSTATUS;
DataSegment : _STRUCT_SEGMENT_DATA;
pSimMessage : ^_STRUCT_MESSAGE;
begin
...
// Remplissage de l'enveloppe
New(pSimMessage); // Allocation de la mémoire pour un nouveau pointeur
pSimMessage^.Envelope.cSom := START_OF_MESSAGE;
pSimMessage^.Envelope.byClass := 0;
...
pSimMessage^.Tail.byCKS := 0;
pSimMessage^.Tail.byEOM := END_OF_MESSAGE;
TreatMessageThreadLst.Add(pSimMessage); // Ajout de la Donnée à envoyer dans la liste d'attente d'envoi |
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
| with TreatMessageThreadLst.LockList() do begin
try
// La liste contient-elle un message ?
FlagWork := Count >= 1;
if FlagWork then begin
// Récupération de la valeur indiquée par le pointeur dans une variable locale
// Items[0] est le premier pointeur de la liste protégée
// Items[0]^ est la valeur du premier pointeur
// _STRUCT_MESSAGE(Items[0]^) est la première valeur transtypée sous la forme d'un _STRUCT_MESSAGE
CurrentMessage := _STRUCT_MESSAGE(Items[0]^);
try
SetLength(_STRUCT_MESSAGE(Items[0]^).Datas, 0);
except
FichierLog('EXCEPT', 'SetLength à Zéro', Exception(ExceptObject()).Message);
end;
// Le Message est ENTIEREMENT recopié en Memoire dans CurrentMessage
// On peut libérer le pointeur
Dispose(Items[0]);
// On peut supprimer le pointeur de la File d'Attente
Delete(0);
end;
finally
TreatMessageThreadLst.UnlockList();
end;
end; // with |