Page 1 sur 1
passer un tableau en parametre dans un thread
Publié : ven. 18/janv./2008 20:42
par Atomo
Salut à tous, je souhaiterais passer un tableau à 1 dimension en paramètre dans un thread mais cela ne marche pas de la même façon que dans une procédure apparemment.
J’utilise ce code :
Code : Tout sélectionner
Dim tableau.s(2)
tableau(0) = "pierre"
tableau(1) = "paul"
tableau(2) = "jack"
Procedure list(array.s(1))
For x=0 To 2
Debug array(x)
Next x
EndProcedure
CreateThread(@list(), tableau())
Delay(1000)
End
Cela me renvoi une erreur invalide memory acces.
Je vous remercie d'avance

Publié : ven. 18/janv./2008 21:13
par SpaceMan
je crois qu'on ne passer en paramètre à un Thread un
String
ton tableau est de type String
référence à ce post du forum anglais
http://www.purebasic.fr/english/viewtop ... ing+thread
Publié : ven. 18/janv./2008 21:58
par Atomo
ok merci pour ta réponse.
Publié : sam. 19/janv./2008 3:27
par Gillou
Normalement ça doit être possible avec les pointeurs en transmettant uniquement l'adresse du tableau au thread (@Tableau()) et en récupérant avec *array. Après il faut jouer avec PeekL et PeekS
Ou autre méthode mettre le tableau en global...
Publié : sam. 19/janv./2008 8:01
par case
a mon avis mettre le tableau en global est une bonne idée

Publié : sam. 19/janv./2008 13:35
par Anonyme
Code : Tout sélectionner
Dim tableau.s(2)
tableau(0) = "pierre"
tableau(1) = "paul"
tableau(2) = "jack"
Procedure list(*Tab)
For x=0 To 2
AdresseDuString = PeekL(*Tab+(x*4))
Debug PeekS(AdresseDuString)
Next x
EndProcedure
CreateThread(@list(), tableau())
Delay(1000)
End
Ton tableau de string contient uniquement les adresses mémoire des string stockés. au cas ou tu cherches à jouer des coups de poke et peek
Donc , ce n'est pas vraiment un tableau de string, mais un tableau de long contenant des pointeurs vers des adresses qui elles même contiennent des char , tout cet ensemble forme les "string"

Publié : lun. 21/janv./2008 10:12
par Atomo
Merci pour vos réponses, je vais utiliser un tableau global ca sera plus simple

Publié : lun. 21/janv./2008 18:33
par Anonyme
Le global n'est pas un problème :
Code : Tout sélectionner
Dim T(1)
Procedure Test(Ptr,Number)
PokeL(Ptr,Number)
EndProcedure
Test(@T(1),50)
Debug T(1)