Les objets en PureBasic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Les objets en PureBasic

Message par Backup »

Warkering a écrit : Et oui Dobro, la mémoire est toujours paginée de nos jours, par quatre mégaoctets je crois bien. Ce serais même un peu insensé de nos jours de gérer huit gigaoctets de mémoire vive autrement.
ha ? , il m'avait pourtant semblé que la pagination ne touchait que la memoire virtuel ..

La mémoire virtuelle= "la réunion de la mémoire physique (RAM) et des fichiers de pagination (SWAP, pagefile.sys)"

mais que la Ram ( meme 8 go ) n'etait pas paginé ... :) .. mais bon ... me trompais-je peut etre..
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Les objets en PureBasic

Message par blendman »

Warkering a écrit :J'utilisais la méthode de Blendman. Dorénavant, ce sera la méthode Fred !
en fait, moi, j'ai toujours utilisé la méthode de Fred :D, c'est à dire de commencer pour chaque nouveau type d'objet d'objet à zéro (sprite, image, window, gadget, etc...).

Car il y a effectivement ça de noter dans la doc :
Etant donné que c'est indexé, si vous utilisez la valeur 0 pour votre premier objet et la valeur 1000 pour votre deuxième objet, il y aura 1001 index de disponibles et 999 seront inutilisés, ce qui n'est pas très efficace (gâchis de mémoire vive). C'est pour cette raison qu'il faut autant que possible utiliser une indexation sequentielle, qui commence à partir de 0.
La méthode que j'indiquai peut être utile pour créer plusieurs énumération qui se suivent, mais pour un même type d'objet ;).
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: Les objets en PureBasic

Message par Fred »

Les objets indexés sont gérés avec des tableaux: de 0 à 1000, ca fait 1000 cases -> donc si tu utilise le chiffre 1000 directement pour ton objet, les 999 premieres sont vides (mais allouées quand meme).

Pour #PB_Any, c'est complement différent, c'est directement un pointeur vers l'objet qui est renvoyé (alloué dynamiquement).
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Les objets en PureBasic

Message par Backup »

merci pour ces précisions :)

petite derniere ... pourquoi avoir utilisé un tableau , et pas une liste (ou map)( question de grand Naïf ) ? :)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Les objets en PureBasic

Message par graph100 »

ca doit être bcp plus rapide car l'accès se fait sans calcul.

j'ai une autre question pour fred sur les #pb_any, les index pris par le retour de pb_any ne peuvent pas être utilisé comme numéro d'objet ?
comment ça se fait que les deux méthodes puissent coexister avec les mêmes méthodes d'accès de la part de l'utilisateur ?
(si j'ai bien compris, même un objet normal par ex d'index 1 a un index pb_any qui pointe dessus non ?)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Les objets en PureBasic

Message par Mesa »

Peut-on créer une liste exhaustive ?

Code : Tout sélectionner

Enumeration ; Fenêtres
  
EndEnumeration

Enumeration ; Menus
  
EndEnumeration

Enumeration ; Gadgets
  
EndEnumeration

Enumeration ; Images
  
EndEnumeration

Enumeration ; Sprites
  
EndEnumeration
sprite3D ?
Quoi d'autre ?

Mesa.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Les objets en PureBasic

Message par Backup »

Mesa a écrit :Peut-on créer une liste exhaustive ?

sprite3D ?
Quoi d'autre ?

Mesa.
Non pas vraiment , car il existe des centaines de raison d'utiliser les enumerations

je pense notamment au instruments Midi par exemple ;)
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Les objets en PureBasic

Message par dayvid »

Ce code de Mesa est plutôt propre je trouve !

Code : Tout sélectionner

Enumeration ; Fenêtres
 
EndEnumeration

Enumeration ; Menus
 
EndEnumeration

Enumeration ; Gadgets
 
EndEnumeration

Enumeration ; Images
 
EndEnumeration

Enumeration ; Sprites
 
EndEnumeration
Et sinon, ceci est-il possible ?, Normalement oui !
A moins que je n'est rien compris :oops:

Code : Tout sélectionner

Enumeration ; Fenêtres
  #Fenetre1
  #Fenetre2
  #Fenetre3
EndEnumeration

Enumeration ; Menus
  #Menu1
  #Menu2
  #Menu3
EndEnumeration

Enumeration ; Gadgets
  #Gadget1
  #Gadget2
  #Gadget3
EndEnumeration

Enumeration ; Images
  #Image1
  #Image2
  #Image3
EndEnumeration

Enumeration ; Sprites
  #Sprite1
  #Sprite2
  #Sprite3
EndEnumeration

Debug #Fenetre1
Debug #Fenetre2
Debug #Fenetre3

Debug #Menu1
Debug #Menu2
Debug #Menu3

Debug #Gadget1
Debug #Gadget2
Debug #Gadget3

Debug #Image1
Debug #Image2
Debug #Image3

Debug #Sprite1
Debug #Sprite2
Debug #Sprite3
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
meganet
Messages : 317
Inscription : jeu. 20/janv./2005 22:00

Re: Les objets en PureBasic

Message par meganet »

Bonjour,
j'aurais 2 petites questions.

Si chaque type d'objet à son propre tableau, peut-on avoir accès à celui-ci pour avoir par exemple la liste des fenêtres, des menus, etc?
Cela pourrait s'avérer pratique par exemple dans une fonction de gestion d'erreur pour fermer tous les fichiers, fenêtres ou autres ouvert précédemment sans en oublier.

Et si j'ai bien compris, avec #PB_ANY, c'est un pointeur sur l'objet créé dynamiquement qui est renvoyé. Mais est-ce qu'il y a aussi une référence sur cette objet ajouté dans le tableau associé ou pas du-tout?


Bonne journée à tous.
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Re: Les objets en PureBasic

Message par minirop »

Je vois rien dans la doc qui le permettrait, genre windowGreatestID() par exemple. mais ça pourrait être une bonne idée, ça éviterait de gérer soi-même un tableau de pointeur et donc faire :

Code : Tout sélectionner

For i = 0 To windowGreatestId()
    If IsWindow(i)
        // faire qq chose avec WindowId(i)
    EndIf
Next
Pour la deuxième question, aux vues des réponses précédentes, la réponse est "pas du tout". Pour faire simple, ça pourrait ressembler à :

Code : Tout sélectionner

Procedure OpenWindow(id)
    If id == #PB_Any
        ProcedureReturn AllocateMemory(10)
    Else
        ptr = AllocateMemory(10)
        cache(id) = ptr
        ProcedureReturn id
    EndIf
EndProcedure
meganet
Messages : 317
Inscription : jeu. 20/janv./2005 22:00

Re: Les objets en PureBasic

Message par meganet »

Je ne trouves pas ça très cohérent. Pourquoi ajouter l'identifiant d'un fichier par exemple, créé avec un index et pas celui créé dynamiquement dans le tableau de fichier?
ça permettrai justement de garder une trace de chaque objet initialisé.

Pour la deuxième question je n'ai rien trouvé non plus dans la doc justement.
D'où ma question peut-on accédé à ces tableaux ça éviterai d'avoir à créer un tableau manuellement. Pourquoi recréer un deuxième tableau si un existe déjà.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Les objets en PureBasic

Message par Backup »

a la reflexion , il ne m’étonnerai pas que ce soit du au fait que le compilateur
Purebasic soit une seule pass

du coup , il ne doit pas pouvoir remettre tout en ordre avant compilation ..

faudrai que Fred nous informe la dessus :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Les objets en PureBasic

Message par Le Soldat Inconnu »

Zut alors, moi je groupe toutes mes énumérations en une seule :(
Je ne pensais pas que ça fonctionnait de la sorte, va falloir que je reprenne ça :mrgreen:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre