Comment éviter de perturber un timer?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Ca ne devrait pas le perturber.
Par contre, si la procédure envoie des messages à la fenêtre, même s'ils sont envoyés aux bons moments, ils vont dans la queue des messages. Et si celle-ci est encombrée...
Donne un code où ton problème survient qu'on voit ça.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

et j'ai laissé juste le Delay(1)

et là ca marche nickel....
j'avais humblement fait la remarque au debut du topic !! :? :D

voici ce que j'avais ecrit :
tu doit surement utiliser un "WaitWindowEvent() "

utilise un "WindowEvent()" suivi d'un delay(2) et tu aura un meilleurs
rendu , je pense ! Smile
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Message par Torp »

Ce bout de code tendrait à prouver que meme lorsque l'on fait un timer par procedure, non attaché à une fenetre, un événement est tout de meme envoyé à celle-ci.

Isn't it?

Code : Tout sélectionner

Declare Timer()
Declare Sablier(hwnd.l, uMsg.l, idEvent.l, dwTime.l)

OpenConsole()

Global Timer1

If InitMouse()=0 Or InitSprite()=0 Or InitKeyboard()=0 Or InitSound()=0
  MessageRequester("Erreur","Impossible d'initialiser DirectX",0)
  End
EndIf

If OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_TitleBar,"Le jarnac")=0
  MessageRequester("Erreur","Impossible d'afficher l'écran principal",0)
  End
EndIf

If OpenWindowedScreen(WindowID(),0,0,800,600,0,0,0)=0
  MessageRequester("Erreur","Impossible d'afficher l'écran principal",0)
  End
EndIf

Timer()

Repeat
  Event=WindowEvent()
  PrintN(Str(Event))
  Delay(5)
Until Event=#PB_Event_CloseWindow

Procedure Timer()
  Timer1=SetTimer_(#Null,#Null, 1000, @Sablier())
EndProcedure

Procedure Sablier(hwnd.l,uMsg.l,idEvent.l,dwTime.l)
  Select uMsg
    Case #WM_TIMER
      Select idEvent 
        Case Timer1 
          ; boucle vide
      EndSelect
  EndSelect
EndProcedure
Répondre