Page 1 sur 1
[RESOLU] Tableau et pointeur mauvais ménage?
Publié : dim. 28/nov./2021 18:08
par Ekim
Bonsoir à tous
Ce morceau de code me rend fou car je ne vois pas où est le problème
Quelqu'un peut m'aider s'il vous plait?
Code : Tout sélectionner
Enumeration img 1
#IMG1
#IMG2
EndEnumeration
Structure Shap
idcurrent.l
px.l
py.l
wx.l
wy.l
Array Tab01.l(0,0)
EndStructure
*param.Shap = AllocateMemory(SizeOf(Shap))
*param\Tab01(100,100)
*param\idcurrent = #IMG1
*param\wx = 100
*param\wy = 100
*param\Tab01(0,0) = Random(100,0)
Procedure Gpart1(*param.Shap)
Debug *param\Tab01(3,3)
Debug *param\idcurrent
Debug *param\wx
Debug *param\wy
EndProcedure
If CreateThread(@Gpart1(), *param)
Debug "Thread ok"
EndIf
Re: Tableau et thread mauvais ménage?
Publié : dim. 28/nov./2021 18:18
par Ar-S
Bonjour,
Je n'utilise pas les pointeurs, j'ai jamais pigé grand chose ni vu dans de l'applicatif de base un réel gain de perf.
Au delà de ça, ton soucis ne vient apparemment pas du tout du Thread.
Tu devrais modifier ton titre en "Tableau et pointeur mauvais ménage?"
Re: Tableau et thread mauvais ménage?
Publié : dim. 28/nov./2021 18:25
par Micoute
Bonjour Ekim,
tu as simplement oubliè l'instruction Dim
Code : Tout sélectionner
Enumeration img 1
#IMG1
#IMG2
EndEnumeration
Structure Shap
idcurrent.l
px.l
py.l
wx.l
wy.l
Array Tab01.l(0,0)
EndStructure
*param.Shap = AllocateMemory(SizeOf(Shap))
Dim *param\Tab01(100,100)
*param\idcurrent = #IMG1
*param\wx = 100
*param\wy = 100
*param\Tab01(0,0) = Random(100,0)
Procedure Gpart1(*param.Shap)
Debug *param\Tab01(3,3)
Debug *param\idcurrent
Debug *param\wx
Debug *param\wy
EndProcedure
If CreateThread(@Gpart1(), *param)
Debug "Thread ok"
EndIf
Re: Tableau et pointeur mauvais ménage?
Publié : dim. 28/nov./2021 21:53
par Ekim
Bonsoir @Ar-s, tes désirs sont des ordres, je viens de modifier le titre
et pour te répondre, il est vrai que les pointeurs sont un vrai casse cacahouète voir même à éviter si on a pas totalisé les 6h de sommeil minimum
salut @Micoute, ce que tu avais trouvé était effectivement un oubli, mais le vrai problème semble persister, c'est à dire que je n'ai toujours pas l'information du tableau qui se trouvent dans la procédure même
Code : Tout sélectionner
Enumeration img 1
#IMG1
#IMG2
EndEnumeration
Structure Shap
idcurrent.l
px.l
py.l
wx.l
wy.l
Array Tab01.l(0,0)
EndStructure
*param.Shap = AllocateMemory(SizeOf(Shap))
Dim *param\Tab01(100,100)
*param\idcurrent = #IMG1
*param\wx = 100
*param\wy = 100
*param\Tab01(0,0) = Random(100,0)
Procedure Gpart1(*param.Shap)
*param\Tab01(3,3) = 56
*param\idcurrent = 16
*param\wx = 10
*param\wy = 26
EndProcedure
If CreateThread(@Gpart1(), *param)
Debug "Thread ok"
EndIf
Debug *param\Tab01(3,3)
Debug *param\idcurrent
Debug *param\wx
Debug *param\wy
Repeat
Event = #PB_Event_CloseWindow
Until #PB_Event_CloseWindow
Re: Tableau et pointeur mauvais ménage?
Publié : lun. 29/nov./2021 0:16
par cage
Bonsoir,
J'ai juste ajouté un Delay(1000) entre la création du Thread et les Debug car tu veux afficher les résultats avant que le thread ne fasse son job.
Code : Tout sélectionner
If CreateThread(@Gpart1(), *param)
Debug "Thread ok"
EndIf
Delay(1000)
Debug *param\Tab01(3,3)
Debug *param\idcurrent
Debug *param\wx
Debug *param\wy
cage
Re: Tableau et pointeur mauvais ménage?
Publié : lun. 29/nov./2021 0:40
par Demivec
Voir aussi:
Code : Tout sélectionner
Enumeration img 1
#IMG1
#IMG2
EndEnumeration
Structure Shap
idcurrent.l
px.l
py.l
wx.l
wy.l
Array Tab01.l(0,0)
EndStructure
*param.Shap = AllocateMemory(SizeOf(Shap))
Dim *param\Tab01(100,100)
*param\idcurrent = #IMG1
*param\wx = 100
*param\wy = 100
*param\Tab01(0,0) = Random(100,0)
Procedure Gpart1(*param.Shap)
*param\Tab01(3,3) = 56
*param\idcurrent = 16
*param\wx = 10
*param\wy = 26
EndProcedure
set_Gpart1 = CreateThread(@Gpart1(), *param)
If set_Gpart1
Debug "Thread ok"
EndIf
WaitThread(set_Gpart1) ; ou Delay(x)
Debug *param\Tab01(3,3)
Debug *param\idcurrent
Debug *param\wx
Debug *param\wy
Repeat
Event = #PB_Event_CloseWindow
Until #PB_Event_CloseWindow
Re: Tableau et pointeur mauvais ménage?
Publié : lun. 29/nov./2021 22:39
par Ekim
Bonsoir @Cage et @Demivec
l'affichage avant le démarrage du thread?

encore une bizarrerie quantique
excellent les gars pour le déblocage, j'étais complètement à côté de la plaque avec le chemin que j'avais emprunté pour résoudre ce problème
exemple "CreateSemaphore "
encore merci
Re: Tableau et pointeur mauvais ménage?
Publié : mer. 01/déc./2021 10:34
par Ollivier
Euh... Salut je suis en retard, désolé !
Bon... Je suppose que vos axones ont pris un peu d'oxydation.
Source (doc) :
https://www.purebasic.com/french/docume ... tions.html
Code : Tout sélectionner
Structure myStruc
Array x.s(0, 0)
EndStructure
*x.myStruc = AllocateStructure(myStruc)
; fonctionnement
FreeStructure(*x)
Et si ces fonctions sont "trop" automatisées, utilisez celles-ci :
Code : Tout sélectionner
Structure myStruc
Array x.s(0, 0)
EndStructure
*x.myStruc = AllocateMemory(SizeOf(myStruc) )
InitializeStructure(*x, myStruc)
; fonctionnement 1
ClearStructure(*x, myStruc)
; Ici, on peut mettre un Redim sans
; défoncer la mémoire
; Et, à mon humble avis, cette manip
; ne doit pas être threadée
InitializeStructure(*x, myStruc)
; fonctionnement 2
ClearStructure(*x, myStruc)
FreeMemory(*x)
Après ça, toutes les galipettes avec les threads sont faisables (mais dans les zones balisées par InitializeStructure() en début, et par ClearStructure() en fin). Un redimensionnement de tableau, je pense (à vérifier) qu'il ne faut pas le threader (ou alors, interrompre tous les autres threads de manip du tableau).
Re: [RESOLU] Tableau et pointeur mauvais ménage?
Publié : mer. 02/févr./2022 9:16
par microdevweb
Bonjour,
J'arrive quand la guerre est finie, mais j'utilise personnellement beaucoup de pointeurs. Voici comment personnellement, je procède.
Code : Tout sélectionner
Structure _test
id.i
name.s
EndStructure
Dim *myData._test(10)
; Dynamic allocation of memories
For i = 0 To 9
*myData(i) = AllocateStructure(_test)
With *myData(i)
\id = i
\name = "name "+Str(i)
EndWith
Next
; Display result
For i = 0 To 9
With *myData(i)
Debug "ID : "+Str(\id)+" Name : "+\name
EndWith
Next
; free dynamic memories (when you ever don't more need those)
For i = 0 To 9
FreeStructure(*myData(i))
Next