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
:wink:
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" :D

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)