Le point sur Delay(), WindowEvent() et l'usage CPU à 100%

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Le point sur Delay(), WindowEvent() et l'usage CPU à 100

Message par microdevweb »

@crisot,

Intéressant, je n'ai pas testé mais du fait que fred semble approuvé je te donne raison. Par contre Spock à raison que cette manière de procédé est reprise dans la doc.

Perso dans le cas de gestion de canvas, avant j'utilisais

Code : Tout sélectionner

Repeat
      Event=WaitWindowEvent(1)
      ;Traitement du survol canvas ect...
Until Event=#PB_Event_CloseWindow
Maintenant je ne traite plus mes événements dans dans la boucle (excepté pour les jeux) mais utilise BindEvent();BindGadgetEvent();BindMenuEvent()

Code : Tout sélectionner

BindGadgetEvent(#Canvas,@EventCanvas())
Repeat:WaitWindowEvent():ForEver
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Le point sur Delay(), WindowEvent() et l'usage CPU à 100

Message par microdevweb »

Voila un petit teste
Sans delay() processeur occupé à 25% (beaucoup pour cette petite boucle) avec delay(1) 0%
Alors je penses qu'il faut agir au cas par cas

Code : Tout sélectionner

InitSprite()
OpenWindow(0,0,0,800,600,"teste")
OpenWindowedScreen(WindowID(0),0,0,800,600)
 Define gTimeElapsed,gTriger=1000,gCount=0
CreateSprite(0,100,100)
LoadFont(0,"Arial",30)
Repeat
;       Delay(1)
      gEvent=WindowEvent()
      If (ElapsedMilliseconds()-gTimeElapsed)>=gTriger ;Le triger ICI
            gCount+1
            StartDrawing(SpriteOutput(0))
            DrawingFont(FontID(0))
            X=(100/2)-((TextWidth(Str(gCount)+" '' "))/2)
            Y=(100/2)-((TextHeight(Str(gCount)+" '' "))/2)
            DrawText(X,Y,Str(gCount)+" '' ")
            StopDrawing()
            gTimeElapsed=ElapsedMilliseconds()
      EndIf
      ClearScreen(0)
      DisplaySprite(0,350,250)
      FlipBuffers()
Until gEvent=#PB_Event_CloseWindow
End
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Le point sur Delay(), WindowEvent() et l'usage CPU à 100

Message par microdevweb »

même en modifiant le code avec double boucle et n'inversant les buffers que toute les seconde, sans Delay() conso 25%

Code : Tout sélectionner

Define gTimeElapsed,gTriger=1000,gCount=0
CreateSprite(0,100,100)
LoadFont(0,"Arial",30)
Repeat
      ;       Delay(1)
      Repeat
            gEvent=WindowEvent()
            If gEvent=#PB_Event_CloseWindow
                  End
            EndIf
      Until gEvent=0
      If (ElapsedMilliseconds()-gTimeElapsed)>=gTriger ;Le triger ICI
            gCount+1
            StartDrawing(SpriteOutput(0))
            DrawingFont(FontID(0))
            X=(100/2)-((TextWidth(Str(gCount)+" '' "))/2)
            Y=(100/2)-((TextHeight(Str(gCount)+" '' "))/2)
            DrawText(X,Y,Str(gCount)+" '' ")
            StopDrawing()
            gTimeElapsed=ElapsedMilliseconds()
            ClearScreen(0)
            DisplaySprite(0,350,250)
            FlipBuffers()
      EndIf
ForEver
L'avis de Fred serait intéressant sur ce point?
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Le point sur Delay(), WindowEvent() et l'usage CPU à 100

Message par microdevweb »

Petit correctif, FlipBuffer fait bien sont taf dans ce cas entre 0% et 2%

Ben voila je viens d'apprendre encore un truc.

Code : Tout sélectionner

InitSprite()
OpenWindow(0,0,0,800,600,"teste")
OpenWindowedScreen(WindowID(0),0,0,800,600)
 Define gTimeElapsed,gTriger=1000,gCount=0
CreateSprite(0,100,100)
LoadFont(0,"Arial",30)
Repeat
      ;       Delay(1)
      Repeat
            gEvent=WindowEvent()
            If gEvent=#PB_Event_CloseWindow
                  End
            EndIf
      Until gEvent=0
      If (ElapsedMilliseconds()-gTimeElapsed)>=gTriger ;Le triger ICI
            gCount+1
            StartDrawing(SpriteOutput(0))
            DrawingFont(FontID(0))
            X=(100/2)-((TextWidth(Str(gCount)+" '' "))/2)
            Y=(100/2)-((TextHeight(Str(gCount)+" '' "))/2)
            DrawText(X,Y,Str(gCount)+" '' ")
            StopDrawing()
            gTimeElapsed=ElapsedMilliseconds()
      EndIf
      ClearScreen(0)
      DisplaySprite(0,350,250)
      FlipBuffers()
ForEver
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Le point sur Delay(), WindowEvent() et l'usage CPU à 100

Message par G-Rom »

J'ai fait du propre , délockage. Merci de laisser ce topic dans son sujet initial.
Les débats stérile sur ce sujet sont strictement interdit. un simple merci suffit, ou une question si on ne comprends pas le 1° topic.


Merci Crisot.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Le point sur Delay(), WindowEvent() et l'usage CPU à 100

Message par falsam »

G-Rom a écrit :J'ai fait du propre , délockage. Merci de laisser ce topic dans son sujet initial.
Quand tu fais le ménage chez toi tu jettes les meubles avec ? J'avais posté un code essayant de démontrer l’intérêt de vider les événements de la fenêtre avant de passer à autre chose et tu l'as virer. Ce code affichait aussi l'utilisation du processeur pour la tache active. Je sais bien que tu n'aimes pas les taches mais la phobie à ce point !!! Et oui je râle.

Si quelqu'un a sauvegardé ce code, je serais content de le récupérer car j'ai oublié de le sauvegarder.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Le point sur Delay(), WindowEvent() et l'usage CPU à 100

Message par G-Rom »

Ça ne me dit rien , pourquoi je l'aurais effacer ? si c'est le cas, c'est involontaire. désoler.

Edit: si il n'y avait pas eu de bazar sur le topic , j'aurais pas eu à le nettoyer.
Répondre