Bonjour,
Jai beau essayer, je n'arrive pas envoyer une liste chainée en paramètre d'un thread, j'ai essayer de récupérer le pointeur vers le premier élement, de me balader dans la liste grace aux pointeurs qui sont dans les 8 premiers bits, mais le problème est que ma liste contient des chaiens de caractères, donc je ne vois pas comment déteriner la longueur des chaines pour les récupérer.
Voyez vous comment faire ?
Merci
Liste chainées, pointeurs et threads
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Ca n'a pas l'air compliqué pourtant.
Ce code peut t'aider :
Je ne sais plus d'où il vient.
Lio
Ce code peut t'aider :
Code : Tout sélectionner
Structure MaStructure
Champ1.f
Champ2.s
EndStructure
;PureBasic ajoute lui-même le Next et le Previous
NewList Maliste.MaStructure() ;Déclare une liste chainée
Declare TestList(*ptr)
;Ensuite tu peux ajouter un élément à la liste
AddElement(Maliste())
; mémorise le point de la liste créée
*liste = @Maliste()
Maliste()\Champ1 = 34.23
Maliste()\Champ2 = "Salut"
;Ajoute un autre élément
*pointeur.MaStructure = AddElement(Maliste())
Maliste()\Champ1 = 87.81
Maliste()\Champ2 = "au revoir"
TestList(*liste)
; partie de manipulation des pointeurs
*pointeur = PeekL(*pointeur+4) ; recupère le pointeur vers la précédente structure
Debug PeekF(*pointeur+8) ; affiche la première donné
; si on veut passer par les champ, faut ajouter au pointeur les
; 2x4 octets des deux Next/Previous ajouté par PB dans ta structure
*champ.MaStructure = *pointeur+8
Debug *champ\Champ1 ; et on peut lire les champs
Debug *champ\Champ2
Debug "============"
; meme principe pour le suivant
*pointeur = PeekL(*pointeur) ; récupère le suivant cette fois
Debug PeekF(*pointeur+8) ; affiche la première donné
*champ.MaStructure = *pointeur+8
Debug *champ\Champ1 ; et on peut lire les champs
Debug *champ\Champ2
Debug "============"
;tu peux visualiser le contenu de ta liste
Debug "***********"
ForEach Maliste()
Debug Maliste()\Champ1
Debug Maliste()\Champ2
Debug "***********"
Next
; procedure quelconque
Procedure TestList(*ptr)
Protected NewList Uneliste.MaStructure()
ChangeCurrentElement(Uneliste(), *ptr)
AddElement(Uneliste())
Uneliste()\Champ1 = 66.23
Uneliste()\Champ2 = "Trois"
EndProcedure
; IDE Options = PureBasic v4.00 (Windows - x86)
; CursorPosition = 52
; FirstLine = 18
Lio

Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
merci, ce code vient du forum, je m'étais basé dessus pour mes test. Comme tu le dis ce n'est pas compliqué, je ne sais pas pourquoi j'ai bloqué dessus. Voici un exemple :
Code : Tout sélectionner
Structure MaStructure
Champ1.s
Champ2.s
EndStructure
;PureBasic ajoute lui-même le Next et le Previous
NewList Maliste.MaStructure() ;Déclare une liste chainée
Declare TestList(*ptr)
;Ensuite tu peux ajouter un élément à la liste
*liste = AddElement(Maliste())
; mémorise le point de la liste créée
Maliste()\Champ1 = "34.23 "
Maliste()\Champ2 = "Salut"
AddElement(Maliste())
Maliste()\Champ1 = "87.81 "
Maliste()\Champ2 = "au revoir"
TestList(*liste)
; procedure quelconque
Procedure TestList(*ptr)
Protected NewList Uneliste.MaStructure()
If *ptr ; Si la liste n'est pas vide
Repeat
*Champ.Mastructure = *ptr + 8 ; On lit la structure
Debug "-------"
Debug *Champ\Champ1
Debug *Champ\Champ2
*ptr = PeekL(*ptr) ; On lit l'adresse du prochain élément
Until *ptr = 0 ; Si elle est nulle, on sort de la boucle
EndIf
EndProcedure