Page 1 sur 4
OpenScreen problème étrange
Publié : dim. 30/mars/2014 18:07
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
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
Re: OpenScreen problème étrange
Publié : dim. 30/mars/2014 18:28
par G-Rom
manque un Delay()
Re: OpenScreen problème étrange
Publié : dim. 30/mars/2014 19:04
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 ?
Re: OpenScreen problème étrange
Publié : dim. 30/mars/2014 19:53
par Backup
............ Je suis un Âne ! ...............
Re: OpenScreen problème étrange
Publié : dim. 30/mars/2014 21:37
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
En plus je suis d'accord avec toi, cette façon de coder est pourrie
Merci de ton aide.
Re: OpenScreen problème étrange
Publié : dim. 30/mars/2014 23:01
par Backup
............ Je suis un Âne ! ...............
Re: OpenScreen problème étrange
Publié : dim. 30/mars/2014 23:40
par majikeyric
Dobro a écrit :on n'imbrique pas des boucles repeat ....
Ha bon ? pourquoi, on peut imbriquer tout ce qu'on veut
Dobro a écrit :surtout quand ça sert a rien

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
ç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
Re: OpenScreen problème étrange
Publié : lun. 31/mars/2014 1:10
par Backup
............ Je suis un Âne ! ...............
Re: OpenScreen problème étrange
Publié : lun. 31/mars/2014 1:20
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
Re: OpenScreen problème étrange
Publié : lun. 31/mars/2014 1:32
par Backup
............ Je suis un Âne ! ...............
Re: OpenScreen problème étrange
Publié : lun. 31/mars/2014 8:47
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.
Re: OpenScreen problème étrange
Publié : lun. 31/mars/2014 9:17
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

Re: OpenScreen problème étrange
Publié : lun. 31/mars/2014 9:26
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.
Re: OpenScreen problème étrange
Publié : lun. 31/mars/2014 10:32
par Backup
............ Je suis un Âne ! ...............
Re: OpenScreen problème étrange
Publié : lun. 31/mars/2014 11:48
par djes
Il n'y a que chez moi que le texte disparaît et n'apparaît plus?
