Page 1 sur 2

souris et crash application

Publié : mar. 12/avr./2016 12:13
par Uhuru
Je suis sur la version 5.42 LTS en 32 bits sous Windows 7

J'ai une application qui tourne en fenetré. Si je passe ma souris windows par dessus l'application, mon curseur devient le curseur 'en traitement'
si je clique une fois DANS ma fenetre, l'application plante totalement comme si le click bloquait le 'repeat' ...

Vous avez déjà constaté cela ?

Re: souris et crash application

Publié : mar. 12/avr./2016 13:04
par Ar-S
Tu peux surement entrainer ce genre de réaction avec une boucle mal foutue qui ne laisse pas souffler le proce..
Si tu utilises un waitwindowsevent(), essaye déjà de mettre waitwindowsevent(20) pour voir si ça change quelque chose.
Sans code on ne pourra pas t'aider plus que ça.

Re: souris et crash application

Publié : mar. 12/avr./2016 13:05
par Marc56
Si l'application est exécutée dans l'IDE avec le debogueur activé tu devais avoir un message d'erreur au moment du crash.

Re: souris et crash application

Publié : mar. 12/avr./2016 13:15
par Uhuru
je l'execute bien depuis l'IDE avec debogueur activé mais pas de message sauf

[14:12:57] Waiting for executable to start...
[14:12:57] Executable type: Windows - x86 (32bit, Unicode)
[14:12:57] Executable started.
[14:13:38] The debugged executable quit unexpectedly.

Je n'utilise pas non plus waitwindowsevent(). C'est juste un screen avec une boucle qui affiche un starfield.

Je pense effectivement plus à une boucle mal fichue, je vais chercher un peu avant de poser le code ici. En tout cas cela veut dire que techniquement ca ne devrait pas planter ;)

Re: souris et crash application

Publié : mar. 12/avr./2016 13:23
par Marc56
- Place un point d'arrêt (F9) au début ou à l'endroit le plus suspect.
- Lance le programme (F5)
- Dès qu'il s'arrête fait le avancer pas à pas (F8)

Regarde en même temps la fenêtre de debug « Voir les variables »

Ajoute des lignes Debug.

Pour tout ce qui est créé dynamiquement par le programme, précède par un contrôle d'existance avec les fonctions Is...
Ex: If IsImage(#...) etc

:wink:

Re: souris et crash application

Publié : mar. 12/avr./2016 13:58
par Uhuru
Bon, rien à faire
Voici le code

Ca ouvre une fenetre, si je passe ma souris sur la fenetre, j'ai le pointeur qui tourne
Si je clique plusieurs fois (genre 20) de suite dans la fenetre sans bouger => crash

Code : Tout sélectionner

If InitSprite()=0:MessageRequester("Oops!","Video could not be initialized, quitting!"):End:EndIf
If InitKeyboard()=0:MessageRequester("Oops!","Keyboard could not be initialized, quitting!"):End:EndIf

#scrx=640 ; résolution x de l'écran
#scry=480 ; résolution y de l'écran
#numstars=128 ; nombre d'étoiles par plan 
#starplan=3 ; nombre de plans

Structure StarVars
	star_x.l
	star_y.l
	star_speed.F
	star_colour.l
EndStructure

Global Dim Stars.StarVars(#starplan,#numstars)

If FS=0
	OpenWindow(1,0,0,#scrx,#scry,"",#PB_Window_ScreenCentered|#PB_Window_WindowCentered)
	OpenWindowedScreen(WindowID(1),0,0,#scrx,#scry)
Else
	OpenScreen(#scrx,#scry,32,"",#PB_Screen_WaitSynchronization,60)
EndIf

Procedure _2DStarfield()
For S=1 To #starplan
	For F=0 To #numstars-1
		Stars(S,F)\star_x=Random(#scrx)
		Stars(S,F)\star_y=Random(480,0)
	Next F
Next S
	
For F=0 To #numstars-1
	Stars(1,F)\star_speed=3 : Stars(1,F)\star_colour=RGB(64,64,64)
	Stars(2,F)\star_speed=4 : Stars(2,F)\star_colour=RGB(128,128,128)
	Stars(3,F)\star_speed=5 : Stars(3,F)\star_colour=RGB(255,255,255)
Next F
EndProcedure

Procedure bouge2DStarfield()

For S=1 To #starplan
	For F=0 To #numstars-1
		Box(Stars(S,F)\star_x,Stars(S,F)\star_y,1,1,Stars(S,F)\star_colour)
		Stars(S,F)\star_x-Stars(S,F)\star_speed
		If Stars(S,F)\star_x<=0:Stars(S,F)\star_x=#scrx:EndIf
	Next F
Next S

EndProcedure

_2DStarfield()   ; creation du starfield

Repeat 
  ExamineKeyboard()
  ClearScreen(RGB(0,0,0))
  If StartDrawing(ScreenOutput())    
    bouge2DStarfield()
  StopDrawing() 
  EndIf
 FlipBuffers()


Until KeyboardPushed(#PB_Key_Escape) 
Autre chose, si je mets FS à 1 pour passer en fullscreen, cette fois ci ca plante sur If StartDrawing(ScreenOutput())

[14:54:17] Waiting for executable to start...
[14:54:17] Executable type: Windows - x86 (32bit, Unicode)
[14:54:17] Executable started.
[14:54:18] [ERROR] debug.pb (Line: 60)
[14:54:18] [ERROR] Invalid memory access. (read error at address 0)

Le message du debugeur indique comme si il n'arrivait pas à ouvrir un fullscreen en 32 bits en 640 pa 480 (alors qu'en 800 par 600 ca marche ...)
Je veux bien croire que cette résolution est hasbeen mais quand même, un pilote refuserait d'ouvrir un 640 par 480 en 32 bits ?

Re: souris et crash application

Publié : mar. 12/avr./2016 14:12
par Ar-S
Tu as oublié d'initialiser la souris : InitMouse()
puis de l'examiner dans ta boucle : examinemouse()

Re: souris et crash application

Publié : mar. 12/avr./2016 14:13
par falsam
Il faut penser à vider la pile d’événement de la fenêtre.

Code : Tout sélectionner

If InitSprite()=0:MessageRequester("Oops!","Video could not be initialized, quitting!"):End:EndIf
If InitKeyboard()=0:MessageRequester("Oops!","Keyboard could not be initialized, quitting!"):End:EndIf

#scrx=640 ; résolution x de l'écran
#scry=480 ; résolution y de l'écran
#numstars=128 ; nombre d'étoiles par plan 
#starplan=3   ; nombre de plans

Structure StarVars
  star_x.l
  star_y.l
  star_speed.F
  star_colour.l
EndStructure

Global Dim Stars.StarVars(#starplan,#numstars)

FS = 0

If FS=0
  OpenWindow(1,0,0,#scrx,#scry,"",#PB_Window_ScreenCentered|#PB_Window_WindowCentered)
  OpenWindowedScreen(WindowID(1),0,0,#scrx,#scry)
Else
  OpenScreen(#scrx,#scry,32,"",#PB_Screen_WaitSynchronization,60)
EndIf

Procedure _2DStarfield()
  For S=1 To #starplan
    For F=0 To #numstars-1
      Stars(S,F)\star_x=Random(#scrx)
      Stars(S,F)\star_y=Random(480,0)
    Next F
  Next S
  
  For F=0 To #numstars-1
    Stars(1,F)\star_speed=3 : Stars(1,F)\star_colour=RGB(64,64,64)
    Stars(2,F)\star_speed=4 : Stars(2,F)\star_colour=RGB(128,128,128)
    Stars(3,F)\star_speed=5 : Stars(3,F)\star_colour=RGB(255,255,255)
  Next F
EndProcedure

Procedure bouge2DStarfield()
  
  For S=1 To #starplan
    For F=0 To #numstars-1
      Box(Stars(S,F)\star_x,Stars(S,F)\star_y,1,1,Stars(S,F)\star_colour)
      Stars(S,F)\star_x-Stars(S,F)\star_speed
      If Stars(S,F)\star_x<=0:Stars(S,F)\star_x=#scrx:EndIf
    Next F
  Next S
  
EndProcedure

_2DStarfield()   ; creation du starfield

Repeat 
  
  If FS = 0
    ;Vider la pile d'évenementy de la fenetre
    Repeat ;Evenement window
      Event = WindowEvent()
      
      Select Event    
        Case #PB_Event_CloseWindow
          End
      EndSelect  
    Until Event=0
    ;Fin du vidage
  EndIf
  
  ExamineKeyboard()
  ClearScreen(RGB(0,0,0))
  If StartDrawing(ScreenOutput())    
    bouge2DStarfield()
    StopDrawing() 
  EndIf
  FlipBuffers()
  
  
Until KeyboardPushed(#PB_Key_Escape) 

Re: souris et crash application

Publié : mar. 12/avr./2016 14:17
par falsam
Code précédent modifie si FullScreen :)

Re: souris et crash application

Publié : mar. 12/avr./2016 14:24
par Uhuru
Super !! Merci Falsam :)

Au passage, un ExamineMouse() fait disparaitre le pointer. Normal ? PErso je veux qu'il reste et juste l'utiliser pour vérifier si y a un press button left

Autre chose, si j'utilise la routine musicplay, le fait de cliquer sur la fenetre bloque l'execution de tout SAUF de la musique, là aussi normal ?

Re: souris et crash application

Publié : mar. 12/avr./2016 14:29
par Ar-S
Du moment ou tu veux utiliser ta souris est sur un screen il te faut un curseur (sprite) et donc surveiller cette souris.

Re: souris et crash application

Publié : mar. 12/avr./2016 14:30
par falsam
Uhuru a écrit :un ExamineMouse() fait disparaitre le pointer. Normal ?
Oui. Remplace ton pointeur par un sprite. (Grillé par Ar-s)
Uhuru a écrit :si j'utilise la routine musicplay,
Utilise plutôt la library sound pour les jeux.
:arrow: http://www.purebasic.com/french/documen ... index.html

Re: souris et crash application

Publié : mar. 12/avr./2016 14:37
par Uhuru
Ar-S a écrit :Du moment ou tu veux utiliser ta souris est sur un screen il te faut un curseur (sprite) et donc surveiller cette souris.
Merci beaucoup pour ton aide depuis le début du sujet :)

Re: souris et crash application

Publié : mar. 12/avr./2016 14:37
par Uhuru
falsam a écrit :
Uhuru a écrit :un ExamineMouse() fait disparaitre le pointer. Normal ?
Oui. Remplace ton pointeur par un sprite. (Grillé par Ar-s)
Uhuru a écrit :si j'utilise la routine musicplay,
Utilise plutôt la library sound pour les jeux.
:arrow: http://www.purebasic.com/french/documen ... index.html
Aheum, disons que je veux plus jouer un XM, me semblait que la lib était sur music et pas sur sound non ?

Re: souris et crash application

Publié : mar. 12/avr./2016 15:30
par falsam
Uhuru a écrit :Aheum, disons que je veux plus jouer un XM, me semblait que la lib était sur music et pas sur sound non ?
Tu as raison. je ne savais pas que tu souhaitais jouer des mods.