OpenScreen problème étrange

Sujets variés concernant le développement en PureBasic
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

OpenScreen problème étrange

Message par Lord Nelson »

Bonsoir,

Je rencontre un petit soucis que je ne comprends pas trop à vrais dire avec OpenScreen :?
Ouvrez votre gestionnaire Windows, lancer le code et regardez combien le programme de compilation prends en ressources processeur
Que le débogueur soit en marche ou pas ça change rien pour moi.

Normalement celui-ci devrais être d'environ 0, du moins chez moi, entre 0 et parfois 1% mais au bout d'un moment, quelque petites secondes (20 environ par là)
ce taux change brusquement et sans raison apparente et ce met entre 5 et 8% chez moi et ne descend plus en dessous.
Ma question est pourquoi ça fais ça 8O

Je ne touche à rien du tout et paf ça change comme ça sans raison apparente et j'y comprends rien !
J'aime pas les écran car j'ai l'impression que ça prends beaucoup de ressources pour rien :|

Code : Tout sélectionner

InitSprite = InitSprite()

OpenWindow(1, 0, 0, 800, 600, Titre$, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(1), 0, 0, 800, 600, 0, 0, 0, 0)

Repeat
  
Repeat
  
  Event = WaitWindowEvent(1)
  
  Select Event
      
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
  
Until Event = 0

StartDrawing(ScreenOutput())
DrawText(10, 10, "Ceci est un petit texte sur une seule ligne", RGB(255, 0, 0), RGB(255, 255, 0))
StopDrawing()

FlipBuffers() 
ClearScreen(CouleurFont)

ForEver
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: OpenScreen problème étrange

Message par G-Rom »

manque un Delay()
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: OpenScreen problème étrange

Message par Lord Nelson »

Merci G-Rom

Ceci améliore un peut mais...

Désormais en mettant un Delay(1) avent de ForEver ça met au bout d'un moment entre 3 et 5%, ça fluctue, avent c'était entre 5 et 8%
Mais le problème reste entier quand même !

Au départ entre 0 et 1 puis un peut plus tard entre 3 et 5% comme ça sans raison apparente et sans rien toucher.
C'est le phénomène que je comprends pas, ça semble consommer bien beaucoup de ressources non ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenScreen problème étrange

Message par Backup »

............ Je suis un Âne ! ...............
Dernière modification par Backup le mar. 01/avr./2014 10:42, modifié 1 fois.
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: OpenScreen problème étrange

Message par Lord Nelson »

Dobro, c'est pas moi le fautif la dedans, c'est pas de ma faute si l'aide
dit n'importe quoi, regarde à OpenWindowedScreen() tu verras :wink:

En plus je suis d'accord avec toi, cette façon de coder est pourrie :wink:
Merci de ton aide.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenScreen problème étrange

Message par Backup »

............ Je suis un Âne ! ...............
Dernière modification par Backup le mar. 01/avr./2014 10:42, modifié 1 fois.
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: OpenScreen problème étrange

Message par majikeyric »

Dobro a écrit :on n'imbrique pas des boucles repeat ....
Ha bon ? pourquoi, on peut imbriquer tout ce qu'on veut :mrgreen:
Dobro a écrit :surtout quand ça sert a rien :roll:
si ça sert! Comme il est dit dans la doc, la 2ème boucle sert à traiter TOUS les évènement présent dans la file d'attente, avant d'afficher quoi que ce soit.
Dans ton exemple tu n'en traites qu'un par boucle et c'est pas bon :wink:
ça marche peut être mais dans l'absolu vaut mieux boucler sur le WindowEvent() jusqu'à ce qu'il retourne 0.

Code : Tout sélectionner

  Repeat
    ; Il est très important de traiter tous les événements restants dans la file d'attente à chaque tour
    ;
    Repeat
      Event = WindowEvent()
      
      Select Event 
        Case #PB_Event_Gadget
          If EventGadget() = 0
            End
          EndIf
        
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until Event = 0
  
    FlipBuffers() 
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, x, x)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenScreen problème étrange

Message par Backup »

............ Je suis un Âne ! ...............
Dernière modification par Backup le mar. 01/avr./2014 10:43, modifié 1 fois.
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: OpenScreen problème étrange

Message par majikeyric »

Issue de la doc sur OpenWindowedScreen, c'est une erreur aussi ???

Code : Tout sélectionner

Tous les événements doivent être traités AVANT de 'flipper' (interchanger) les tampons (voir les exemples ci-dessous et FlipBuffers()). 

Moi, ce que je vois c'est que cette particularité est evoquée à plusieurs reprises dans la doc.

ça marche comme tu fais avec WaitWindowEvent(1) par exemple, mais dans des conditions extremes ou il y aurait plein d'events à gérer peut être que ça freezerait... (avec le FlipBuffer()).

Je ne mets pas en doute ton expérience en PB, loin de là, mais ma formation fait que je préfère coller à la doc technique
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenScreen problème étrange

Message par Backup »

............ Je suis un Âne ! ...............
Dernière modification par Backup le mar. 01/avr./2014 10:43, modifié 1 fois.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: OpenScreen problème étrange

Message par Micoute »

Bonjour Dobro et merci d'être mon maître Yoda !

Et je ne dis pas ça par moquerie, j'ai trop de respect pour toi !

J'ai adoré ce petit cour de révision élémentaire, digne d'en faire un tutoriel ! Et cela n'engage que moi.
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 !
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: OpenScreen problème étrange

Message par Lord Nelson »

Dobro...

Ton exemple est pour une simple fenêtre mais pour un écran...
De plus je dois quand même avouer que la doc disais vraie en faite !

Avec ton exemple, j'ai des Freeze quand je redimensionne la fenêtre alors qu'avec l'exemple d'une double boucle, pas !
Mais bon, je ne sais pas qui à raison de vous, je me contente d'apprendre :)

Merci encore pour votre aide :)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: OpenScreen problème étrange

Message par djes »

Le WaitWindowEvent(timer) ne devrait pas être utilisé dans une application avec OpenScreen(), tout simplement parce qu'il ne permet de traiter qu'un événement à la fois. C'est à dire qu'un seul événement sera traité à chaque itération, à chaque frame : un par flipbuffers(), c'est à dire toutes les 16 ms pour un affichage à 60Hz.

Or, une application Windows reçoit des événements en continu (clic, passage à l'avant/arrière-plan, perte de focus, etc.) ; si l'on veut qu'elle soit réactive, il faut qu'elle les traite le plus rapidement possible. Il faut donc une autre boucle pour traiter et vider la file d'attente d'événements à chaque frame.

De plus, cette autre boucle peut servir à traiter les interactions avec l'utilisateur et le réseau.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenScreen problème étrange

Message par Backup »

............ Je suis un Âne ! ...............
Dernière modification par Backup le mar. 01/avr./2014 10:43, modifié 2 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: OpenScreen problème étrange

Message par djes »

Il n'y a que chez moi que le texte disparaît et n'apparaît plus? 8O :?:
Répondre