[RESOLU] Tableau et pointeur mauvais ménage?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

[RESOLU] Tableau et pointeur mauvais ménage?

Message par Ekim »

Bonsoir à tous :D

Ce morceau de code me rend fou car je ne vois pas où est le problème :x
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
Dernière modification par Ekim le mer. 08/déc./2021 23:11, modifié 2 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9475
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Tableau et thread mauvais ménage?

Message 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?"
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Tableau et thread mauvais ménage?

Message 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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Re: Tableau et pointeur mauvais ménage?

Message par Ekim »

Bonsoir @Ar-s, tes désirs sont des ordres, je viens de modifier le titre :P

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 :lol:

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
Avatar de l’utilisateur
cage
Messages : 506
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Tableau et pointeur mauvais ménage?

Message 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
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.00 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Demivec
Messages : 90
Inscription : sam. 18/sept./2010 18:13

Re: Tableau et pointeur mauvais ménage?

Message 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
Ekim
Messages : 215
Inscription : dim. 24/juin/2018 1:20

Re: Tableau et pointeur mauvais ménage?

Message par Ekim »

Bonsoir @Cage et @Demivec

l'affichage avant le démarrage du thread? 8O encore une bizarrerie quantique :lol:

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 " :lol:

encore merci
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Tableau et pointeur mauvais ménage?

Message 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).
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [RESOLU] Tableau et pointeur mauvais ménage?

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre