Fenêtre avec un écran sous seven problème.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Fenêtre avec un écran sous seven problème.

Message par stombretrooper »

Salut !

Pour le développement de 3Arks en parallèle de la version 'officiel', je travail sur un client qui a pour but de montrer à blendman comment utiliser les codes de mise en réseau que je lui fournis.

Lors de la création de ce client 'lite', j'ai rencontré un problème que j'ai pas résolus, (blendman m'a dis qu'il avait rencontré le même problème mais il ne se souvient pas de l'astuce). En gros, quand je déplace la fenêtre contenant mon écran j'ai le droit à un "Ne répond plus", ce qui m'oblige à fermer l'application. Je rencontre ce problème à partir du moment où j'ai ouvert un écran sur la fenêtre, ce qui me fait penser que c'est lié à l'écran et/ou aux dessins, ect...

Niveau code, ma boucle ressemble à ça :

Code : Tout sélectionner

fin=#False
Repeat
  ;{ Boucle de gestion des gadgets :
  Repeat
    Event=WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        fin=#True
      Case #PB_Event_Gadget
        ;Gestion des gadgets....
    EndSelect
  Until Event=0
  ;}
  ;{ Boucle de gestion des events du jeu :
  If jeu_lance=#True
    If IsScreenActive()
      IncludeFile "boucle/refresh_affichage_element.pb"
      IncludeFile "boucle/affichage.pb"
      IncludeFile "boucle/events.pb"
    EndIf
  EndIf
  ;}
  Delay(100)
Until fin=#True
Je n'ai aucun message d'erreur dans le debugger, j'ai essayé de mettre des 'debug' un peu partout, mais non, le programme ne plante pas à un endroit précis. J'ai aussi essayé de remplacer le WindowEvent par un WaitWindowEvent(1), mais bon, ça ne fonctionne pas mieux.

Quelqu'un a-t'il rencontré le même problème ou quelqu'un a-t'il une idée de la provenance d'un tel problème ?
http://www.purebasicstreet.com/ - Site dédié à purebasic.
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Fenêtre avec un écran sous seven problème.

Message par MLD »

Salut stombretrooper

Je ne comprend pas bien ton code :(
Je relève toutefois que tu utilise une fois Repeat et deux possibilités de fin de boucle avec Until
A mon avis, Il doit avoir un Until qui agit au mauvais moment. :cry:
Il est préférable de bien séparé les boucles avec deux Repeat, et deux Until :D
Actuellement si tu as Until Event=0 tu sort de la boucle définitivement, la deuxieme partie du code s'exécute, et puis plus rien.La fenêtre n'est plus pris en compte. :roll: Efin je pense :?:
Bon courage
Michel
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Fenêtre avec un écran sous seven problème.

Message par blendman »

MLD : il y a bien 2 repeat dans le code et 2 until ;)

Strombre : je ne crois pas que le problème vienne de ce code, car si on fait un test simple, il n'y a pas de problème (sous xp). Mais teste-le sous 7 pour voir si ça marche (je vais tester tout à l'heure pour voir) :

Code : Tout sélectionner

InitSprite()
#window = 0
OpenWindow(#window,0,0,800,600,"")
OpenWindowedScreen(WindowID(#window),0,0,800,600,0,0,0)
fin=#False
Repeat
  ;{ Boucle de gestion des gadgets 
  Repeat
    Event=WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        fin=#True
      Case #PB_Event_Gadget
        ;Gestion des gadgets....
    EndSelect    
  Until Event=0  ;}
  ;{ Boucle de gestion des events du jeu :
  If jeu_lance=#True
    If IsScreenActive()      
    EndIf
  EndIf  ;}
  Delay(1)
Until fin=#True
Je me demande si tu ne devrais pas mettre 2 event=waitwindowsevent(1), un dans chaque boucle repeat/until
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Fenêtre avec un écran sous seven problème.

Message par MLD »

@blendman
exuse :oops: Ce matin je ne devais pas etre bien réveillé. :wink:
J'ai compilé le code sous XP, le code compilé ne fonctionne pas.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Fenêtre avec un écran sous seven problème.

Message par Ar-S »

Salut,
Sous 7X64 j'ai pas de "freeze" de la fenêtre.

Code : Tout sélectionner

InitSprite()
#window = 0
If OpenWindow(#window,0,0,800,600,"")
  If OpenWindowedScreen(WindowID(#window),0,0,800,600,0,0,0)
    fin=#False
    Verif = #false
    jeu_lance=#True
    
    Repeat
      ;{ Boucle de gestion des gadgets 
      Repeat
        event=WindowEvent()
        Select event
          Case #PB_Event_CloseWindow
            fin=#True
          Case #PB_Event_Gadget
            ;Gestion des gadgets....
        EndSelect    
      Until event=0  ;}
      ;{ Boucle de gestion des events du jeu :
      If jeu_lance=#True
        If IsScreenActive()
          Verif + 1
          If Verif = #true
            MessageRequester ("Screen GFX ok","ok",#MB_OK) ;-test
            Verif + 1
          EndIf
          
        EndIf
      EndIf  ;}
      Delay(1)
    Until fin=#True
    
  EndIf
EndIf

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Re: Fenêtre avec un écran sous seven problème.

Message par stombretrooper »

Merci de vos réponses.

J'ai testé vos codes et ils marchent nickel, à mon avis le freeze de ma fenêtre ne vient pas de cette boucle, j'ai mal dûs l'identifier, est il possible qu'un bug (boucle infinis, comportement non prévus) dans un thread fasse freezer (bouh le verbe pas beau qui existe pas !) le programme ? (en sachant que j'ai aucune erreur dans le debugger purebasic) ?
http://www.purebasicstreet.com/ - Site dédié à purebasic.
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Re: Fenêtre avec un écran sous seven problème.

Message par stombretrooper »

J'ai cherché, et j'ai finis par trouver...

Il s'avère que je lançais ma fenêtre dans le thread qui gérer les réseaux (le programme client lite est composé de la boucle principal et d'un thread qui reçois les informations du serveur)... Et je penses que le fait d'ouvrir le screen dans le thread, purebasic aime pas du tout... Pour preuve, je suis passé par une variable globale, qui ouvre le screen dans la boucle principal au moment où le thread réseau incrémente la variable à l'endroit où avant j'ouvrais le screen... Et depuis plus de problème, ça marche nickel, je peux déplacer ma fenêtre. ;)

Est ce un comportement 'normal' ou je dois le signaler comme un bug de purebasic ?
http://www.purebasicstreet.com/ - Site dédié à purebasic.
Répondre