Page 8 sur 19

Re: [AIDE PUREBASIC] Mises à jour.

Publié : mar. 02/juin/2015 7:07
par Marc56
Une petite coquille trouvée par hasard dans les exemples sur les fonctions Loc(), Lof() etc

Fichiers = OpenFileRequester(...

en v.o on a

File$ = OpenFileRequester(

(sans doute 's' à la place de '$') :?:

Donc les exemples ne fonctionnent pas car 'OpenFileRequester' doit normalement retourner une chaine.

:wink:

Re: [AIDE PUREBASIC] Mises à jour.

Publié : mar. 02/juin/2015 9:55
par Mesa
Corrigé.

Vous pouvez télécharger l'aide mise à jour ici
http://frazier.wood.free.fr/chm/PureBasic531.rar

M.

Re: [AIDE PUREBASIC] Mises à jour.

Publié : sam. 08/août/2015 4:25
par Ollivier
Bonjour Mesa,

je pense qu'il faut modifier la doc pour la commande Newmap. Il est indiqué une chose actuellement fausse sur l'efficacité du paramètre optionnel 'slots'.

"Plus il y a de slots en interne, plus l'accès à un élément sera rapide, [...]"

Pour l'instant, c'est l'inverse qui se produit...

Re: [AIDE PUREBASIC] Mises à jour.

Publié : sam. 08/août/2015 10:46
par Mesa
@Ollivier
"Plus il y a de slots en interne, plus l'accès à un élément sera rapide, [...]"

Pour l'instant, c'est l'inverse qui se produit...
Les tests que j'ai fait sont conformes à la doc.

Fait plusieurs fois ok avec le code ci-dessous:

Code : Tout sélectionner

n=1
slot=n*512

Global t.L, TimeDebut.q, TimeFin.q
Structure Employe
		Prenom.s
		Nom.s
		Age.L
EndStructure
Structure Service
		Map Employe.Employe()
EndStructure
Structure Societe
		Map Service.Service()
	EndStructure
	
	Repeat
Global NewMap Societe.Societe(slot)
TimeDebut = ElapsedMilliseconds()
For t=1 To 200000
		Define *a.Employe = AddMapElement(Societe("PureBasic"+Str(t))\Service("Commercial"+Str(t))\Employe(), "Reference"+Str(t))
		With *a
			\Prenom = "Pierre "+Str(t)
			\Nom = "Dupond"
			\Age = 28
		EndWith
Next
Global Controle.s = "Prénom du commercial Reference9999 : "+Societe("PureBasic9999")\Service("Commercial9999")\Employe("Reference9999")\Prenom + Chr(10)
TimeFin = ElapsedMilliseconds()
MessageRequester("Nombre de SLOT= "+ Str(slot), Controle + Str( TimeFin - TimeDebut ) + " ms", #MB_OK)
n=n*10
slot=n*512
FreeMap(Societe())

Until n > 100000
Avec mon petit ordi, je passe de 11 secondes avec 512 slots (par défaut) à 2,9 secondes avec 51 200 000 slots.

T'aurais un code à me donner stp ?

M.

Re: [AIDE PUREBASIC] Mises à jour.

Publié : sam. 08/août/2015 19:20
par Ollivier
Bonjour Mesa,

merci pour ta rapidité de réponse tout d'abord, et, merci aussi pour ta participation concernant la documentation, ensuite.

J'ai un code effectivement, en espérant qu'il ne soit pas bugué, donc inéquitable.

Les maps I() et I2() sont testées durant le tracé de dessin. Deux valeurs divergentes en millisecondes en haut à gauche de l'écran. Et c'est défavorable pour la map qui a $FFFFFF au lieu de 512 en argument de création:

Code : Tout sélectionner

 #AuPif = #PB_Any
Macro Qt:"
EndMacro
Macro _(Method, Arg = )
I(Qt#Method(Arg#)Qt) = Method(Arg)
EndMacro
Macro _2(Method, Arg1, Arg2)
I(Qt#Method(Arg1#)Qt) = Method(Arg1, Arg2)
EndMacro
Macro _3(Method, Arg1, Arg2, Arg3)
I(Qt#Method(Arg1#)Qt) = Method(Arg1, Arg2, Arg3)
EndMacro
Macro _4(Method, Arg1, Arg2, Arg3, Arg4)
I(Qt#Method(Arg1#)Qt) = Method(Arg1, Arg2, Arg3, Arg4)
EndMacro
Macro _5(Method, Arg1, Arg2, Arg3, Arg4, Arg5)
I(Qt#Method(Arg1#)Qt) = Method(Arg1, Arg2, Arg3, Arg4, Arg5)
EndMacro
Macro _6(Method, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
I(Qt#Method(Arg1#)Qt) = Method(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
EndMacro
Macro _7(Method, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)
I(Qt#Method(Arg1#)Qt) = Method(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)
EndMacro
Macro _8(Method, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)
I(Qt#Method(Arg1#)Qt) = Method(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)
EndMacro
Macro Alloue:Allocate
EndMacro
Macro Memoire:Memory
EndMacro
Macro Initialise:Init
EndMacro
Macro Lutin:Sprite
EndMacro
Macro Clavier:Keyboard
EndMacro
Macro Souris:Mouse
EndMacro
Macro Bureau:Desktop
EndMacro
Macro Largeur:Width
EndMacro
Macro Hauteur:Height
EndMacro
Macro Profondeur:Depth
EndMacro
Macro Ouvre:Open
EndMacro
Macro Fenetre:Window
EndMacro
Macro Fenetree:Windowed
EndMacro
Macro Ecran:Screen
EndMacro
Macro Efface:Clear
EndMacro
Macro Charge:Load
EndMacro
Macro Police:Font
EndMacro
Macro Echange:Flip
EndMacro
Macro Tampon:Buffer
EndMacro





Global.I NewMap I()
Global.S NewMap S()
Global.I NewMap I2($1000000)
Global.S NewMap S2($1000000)



_(Alloue#Memoire, 32768)

	_(Initialise#Lutin)
		_(Initialise#Clavier)
		_(Initialise#Souris)

		_(Examine#Bureau#s)

			_(Bureau#Largeur, 0)
			_(Bureau#Hauteur, 0)
			_(Bureau#Profondeur, 0)

		_7(Ouvre#Fenetre, #AuPif, 0, 0, I("DesktopWidth(0)"), I("DesktopHeight(0)"), "", #PB_Window_BorderLess)

		FenetreID = WindowID(I("OpenWindow(#AuPif)") )
		_8(Ouvre#Fenetree#Ecran, FenetreID, 0, 0, 320, 240, 1, 0, 0)
		_3(Charge#Police, #AuPif, "FixedSys", 15)

		For A = 1 To 255
			CreateImage(A, 16, 16, 32)
			s = 16
			CreateSprite(A, s, s, #PB_Sprite_AlphaBlending)
			StartDrawing(ImageOutput(A) )
				DrawingFont(FontID(I("LoadFont(#AuPif)") ) )
				DrawText(0, 0, Chr(A), RGBA(255, 255, 255, 255), RGBA(0, 0, 0, 0) )
			StopDrawing()
			ResizeImage(A, s, s, #PB_Image_Raw)
			StartDrawing(SpriteOutput(A) )
				DrawImage(ImageID(A), 0, 0)
			StopDrawing()
		Next
CopyMap(I(), I2() )
Repeat
	Delay(16)
	ExamineKeyboard()
	ExamineMouse()
	Efface#Ecran(0)
	StartDrawing(ScreenOutput() )
		DrawingFont(FontID(I("LoadFont(#AuPif)") ) )
		Y = 0
		Lap0 = ElapsedMilliseconds()
		ForEach I()
			 DrawText(0, 16 * Y, MapKey(I() ) + " -> " + I(), $FFFFFF, $0)
			 Y + 1
		Next
		Lap1 = ElapsedMilliseconds()
		ForEach I2()
			 DrawText(0, 16 * Y, MapKey(I2() ) + " -> " + I2(), $FFFFFF, $0)
			 Y + 1
		Next
		Lap2 = ElapsedMilliseconds()

		DrawText(0, 0, Str(Lap1 - Lap0) + "ms ")
		DrawText(0, 16, Str(Lap2 - Lap1) + "ms ")

	StopDrawing()
	;DisplaySprite(65, 0, 0)
	Echange#Tampon#s()
Until KeyboardPushed(#PB_Key_Escape)
 

Re: [AIDE PUREBASIC] Mises à jour.

Publié : sam. 08/août/2015 22:04
par Ollivier
En étudiant ton code et mon code, Fred voit forcément le problème sainement.

C'est le "ForEach" qui merde quand on tente avec les maps l'équivalent comparatif de ramasser un grain de poussière avec une pelle de 27 tonnes.

Je me risque à penser que le problème expliqué par Erix14 est lié à cela.

Re: [AIDE PUREBASIC] Mises à jour.

Publié : lun. 10/août/2015 1:51
par Ollivier
Cher Mesa,

Le Foreach 100 fois plus lent n'est pas considéré comme un bug.

Donc je te présente mon mea culpa.

J'ai tenté d'exécuter ton code.

L'ordinateur s'essouffle péniblement un quart d'heure puis disjoncte totalement.
Ce n'est pas grave. C'est de la fièvre.

Théoriquement, il est capable de l'exécuter en deux minutes environ. Là, il ne le fait pas du tout, mais ce n'est pas un bug.

J'espère qu'il n'y a pas que la commande Newmap pour modifier les slots.

En tout cas, merci pour ces précisions. J'ignorais que Newmap pouvait se balader dans un boucle...

Re: [AIDE PUREBASIC] Mises à jour.

Publié : lun. 10/août/2015 9:03
par Mesa
Ok, pas de problème.

M.

Re: [AIDE PUREBASIC] Mises à jour.

Publié : lun. 10/août/2015 10:45
par blendman
dans la doc, il faudrait préciser quelque chose pour RGBA() (sans doute vrai aussi pour RGB())
Comtois a précisé :
attention au type des variables utilisées pour contenir la couleur (les nombres sont signés). Utiliser un quad pour être compatible en x86 et x64 (ou un integer si on compile en x64)
Il faut un masque sinon les comparaisons seront faussées :

a.q = RGBA(255,255,255,255) & $FFFFFFFF
Debug a
b.q = RGBA(255,255,255,255)
Debug b

Re: [AIDE PUREBASIC] Mises à jour.

Publié : mer. 12/août/2015 16:45
par Mesa
@Blendman

Plusieurs choses me paraissent bizarres:
(les nombres sont signés)
D'après la doc, de toutes façon, toutes les variables PB de 32 bits et plus sont signées.

Toujours dans la doc, dans "Règles de syntaxe générales", on peut lire: "- La valeur renvoyée par les commandes est le plus souvent un Integer. Dans le cas contraire, le type de la valeur est indiqué dans la description (ligne de syntaxe) de la commande. "

or dans la bibliothèque 2D, on a :
Couleur = RGB(Rouge, Vert, Bleu)
Couleur = RGBA(Rouge, Vert, Bleu, Alpha)
idem dans la doc anglaise.
Donc ces deux fonctions doivent renvoyer un integer.
Il n'est donc pas nécessaire d'utiliser un quad.

Il faut juste se rappeler que sous un OS 32bits, un integer vaut 32 bits alors que sous un OS 64 bits, un integer vaut 64 bits. (voir: "Variables, Types et Opérateurs")

Sauf erreur, en utilisant un LONG qui fait 32 bits que ce soit sur un OS 32 ou un OS 64 bits, il ne devrait pas y avoir de problème et en plus, on économise de la mémoire.

Je vais demander conseil à Fred pour plus d'info.

M.

Re: [AIDE PUREBASIC] Mises à jour.

Publié : mer. 12/août/2015 18:12
par comtois
l'inconvénient d'un long ou d'un integer en x86 c'est la plage d'utilisation :
-2 147 483 648 to +2 147 483 647

Alors que la valeur de RGBA(255,255,255,255) est 4 294 967 295
pour contenir cette valeur il n'y a que le quad ou l'integer en x64.

En clair, il faudrait préciser dans la doc que la valeur retournée est un quad pour RGBA. C'est le seul type qui fonctionne en x86 et x64 (et encore à condition de masquer la valeur si on a besoin de faire des tests par encadrement : If Couleur>x and Couleur<x+100)

Après est-ce nécessaire de surcharger la doc pour expliquer ça ? je n'en suis pas sûr, à toi de voir :)

Re: [AIDE PUREBASIC] Mises à jour.

Publié : jeu. 13/août/2015 8:47
par Mesa
Ok, je comprends mieux.
Je vais voir avec Fred.

M.

Re: [AIDE PUREBASIC] Mises à jour.

Publié : jeu. 13/août/2015 12:40
par nico
Il n'y a pas d'erreur ici:
File$ = OpenFileRequester

Vous corrigez des erreurs sans même vous donnez la peine de les tester?

Re: [AIDE PUREBASIC] Mises à jour.

Publié : jeu. 13/août/2015 13:04
par microdevweb
Resultat.q = MovieStatus(#Video)

-1: La vidéo est en pause.
0: La vidéo est stoppée
> 0: La vidéo est en cours d'exécution.
La valeur renvoyée est le numéro de la trame en cours d'affichage.


>0 retourne le temps en microsecondes... (sauf erreur de ma part)

Re: [AIDE PUREBASIC] Mises à jour.

Publié : ven. 14/août/2015 8:58
par falsam
Bonjour Mesa. Est ce que ce monstrueux travail sert de base à la version accessible sur internet ?