PureBasic

Forums PureBasic
Nous sommes le Mer 19/Juin/2019 5:56

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 16 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mer 31/Oct/2012 7:41 
Hors ligne

Inscription: Ven 16/Mai/2008 7:18
Messages: 7
Bonjour,

dans la béta 8 il est dit :

Note: A window should not be opened in a thread, as there is some limitation on OS X and Linux. A debugger error will be raised.

Cela empêche d'utiliser le debugger alors que sous windows on peut avoir besoin de créer une fenêtre dans un thread.

Exemple :

On crée une application qui utilise plusieurs bureaux (createdesktop), cette appli va créer une ou plusieurs fenêtres pour s'initialiser. Dès lors que le thread principale a créé une fenêtre sur un bureau, il lui est impossible d'utiliser switchdesktop pour creer d'autre fenêtre sur un autre bureau. La solution est de créer un thread , de switcher sur le bureau désiré puis de créer une ou plusieurs fenêtres.

Il serait dommage d'être obliger de se passer du debugger. Ne peut-on pas autoriser la création dans le debugger sur cette plateforme ?

Merci à l'équipe de fantaisie software d'étudier ce problème.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mer 31/Oct/2012 10:57 
Hors ligne
Site Admin

Inscription: Mer 21/Jan/2004 11:03
Messages: 2565
Tu peux entourer les appels d'openwindow() et waitwindowevent() de disable/enabledebugger si tu veux absolument utiliser ca.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Dim 18/Nov/2012 2:23 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 1318
la seule solution c'est de déactiver le débugger ?

mais comment on peut éviter d'ouvrir des fenêtres dans un thread si on en veux plusieurs qui ne sont pas liées entre elles ?
Ça m'ennuie parce que j'utilise ce truc dans un programme (le seul) que j'ai publié :?

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Dim 18/Nov/2012 11:13 
Hors ligne
Site Admin

Inscription: Mer 21/Jan/2004 11:03
Messages: 2565
Je ne comprend pas la notion de 'pas liées entre elles'. Quand tu ouvres une fenetre, elle est gérée de manière indépendante, à partir du moment où ta boucle d'événement est appelée. Si tu postes un code, je pourrais jeter un oeil sur ton probleme.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Dim 18/Nov/2012 13:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 09/Fév/2004 23:38
Messages: 1338
Localisation: Bordeaux
Je pense qu'il voudrait faire un truc du genre :

Code:
Procedure wnd(wndID)
  OpenWindow(wndID, ......)
 
  Repeat
    ; là ça bloque car windowevent() renvera un event sur n'importe quelle fenetre
    ; et on ne peut pas utiliser EventWindow() avant WindowEvent()
    Select WindowEvent()
      Case #WM_CLOSE
        closedWnd = #True
    EndSelect
  Until closedWnd
 
EndProcedure

For i = 0 To 10
  CreateThread(@wnd(), i)
Next

Repeat : Delay(100) : ForEver


L'exemple est inutil dans ce cas là, mais on pourait avoir une proc thread par "type" de fenetres. Elles seraient gérées indépendement les unes des autres sans avoir une proc commune qui s'occupe de recuperer les events de toutes les fenetres et les redispatcher.
D'ailleur, un param optionnel du genre (Wait)WindowEvent([#Window_ID = #PB_Any]) pour recuperer seulement les event d'une fenetre particuliere serait chouette :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Lun 19/Nov/2012 0:19 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 1318
ouaip, c'est exactement ça, mais avec une chtite différence :

C'est pour mon prog ScMangwa (Lien pour la page)
Je suis assez content car des gens l'utilisent, et le trouvent utile :lol: pour une fois que mes progs sortent du cadre familial !

Donc, j'ai une fenêtre principale qui sert pour la lecture, et avec [F1], on ouvre une fenêtre d'aide.
Au départ cette fenêtre rendait la fenêtre principale inactive, avec la fonction : disablewindow()
Je l'utilise d'ailleurs dans d'autre partie du logiciel pour d'autre raisons.

Cependant, on m'a fait remarqué à juste titre, que la fenêtre d'aide contenant des explications du fonctionnement du programme, il pouvait être intéressant voire très pratique de manipuler les deux fenêtres côtes à côtes.

J'ai donc ma boucle principale avec tout les trucs qu'elle gère, et un thread qui gère ma fenêtre d'aide.
Effectivement, je me suis posé la question de savoir si les event d'une fenêtre étaient attrapés par l'autre. Mais jusqu'à présent tout fonctionne parfaitement, je n'ai pas poussé plus loin.

J'ajoute qu'en considérant le fonctionnement du logiciel, il serait très compliqué de gérer la situation sans utiliser de thread.
Le programme principal se passe la main dans plusieurs procédures consécutives, et faire suivre la gestion de la fenêtre d'aide me semble être une belle usine à gaz.

Si vous voulez voir ce que le logiciel donne, il se télécharge avec le lien plus haut. Pour voir les différents comportements, il suffit de lancer le prog, et sur la page principale faire [B] (lance la bibliothèque). Si cette bibliothèque comporte des items (dans le cas d'un utilisateur), une autre fenetre peut être ouverte avec [I], ou clic droit sur les items (c'est pour les infos du livre).
Et la fenêtre d'aide peut elle être ouverte de n'importe ou avec [F1], et elle reste là jusqu'à ce qu'on la ferme.

(c'est une stickywindow car comme elle est de type toolwindow, elle n'apparait pas dans la barre des tâches)

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mar 20/Nov/2012 20:10 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3702
Citation:
J'ai donc ma boucle principale avec tout les trucs qu'elle gère, et un thread qui gère ma fenêtre d'aide.


T'as résolu une difficulté qui n'existe pas par une aberration; je suis loin de tout savoir, peut être que la nécessité d'une fenêtre créé dans un thread existe mais ça doit être hyper rare.

Le thread principale et les threads secondaires ne sont pas identiques, il y a des choses que tu ne peut pas faire dans un thread secondaire comme affiché un messagerequester par exemple.

De plus chaque thread possède sa propre file d'attente, lorsqu'un thread secondaire est créé, sa file d'attente n'existe pas, il faut l'initialiser, ce qui signifie que tu as utiliser un thread secondaire pour traiter des messages de la file d'attente du thread principale; elle est là l'aberration, car si tu avais eu besoin de traiter une fenêtre dans un thread, tu aurais utiliser la file d'attente du thread créé évidemment et pas celle de la boucle principale.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mar 20/Nov/2012 21:19 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 1318
attention là !!

Pour les histoires de file d'attente. la fenêtre est gérée dans le thread, c'est à dire que le thread la créée, la gère , puis la ferme.

Franchement si je devais obtenir le même comportement sans thread, je ne vois pas comment faire sans faire une usine à gaz.

[edit] : j'ai essayé de reproduire le fonctionnement de mon code en isolant les éléments concernés, je ne suis pas arrivé au même résultat...
On obtient ce qu'on devrait attendre.
Du coup je ne comprend pas le fonctionnement du code de mon logiciel, qui lui, sépare les évènements entre la fenêtre d'aide et les autres.

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Dernière édition par graph100 le Mar 20/Nov/2012 21:55, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mar 20/Nov/2012 21:42 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3702
J'ai fait ce code pour voir si je trouvais un problème,
La fenêtre principal permet d'afficher une seconde fenêtre DialogWindow qui bloque la première et aussi une troisième fenêtre qui représente ton fichier d'aide.

dis moi où se situe ton problème par rapport à cet exemple:

Code:
Procedure Dialogwindow()
  If OpenWindow(1, 100, 200, 200, 200, "PureBasic Window 2", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, WindowID(0))

  EndIf
EndProcedure

Procedure Secondwindow()
  If OpenWindow(2, 100, 200, 200, 200, "PureBasic Window 2", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, WindowID(0))

  EndIf
EndProcedure



If OpenWindow(0, 100, 200, 200, 200, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  ButtonGadget(1, 10 ,10 , 100, 20, "Dialog Box")
  ButtonGadget(2, 10 ,60 , 100, 20, "Second Window")
 
  Repeat
    Event = WaitWindowEvent()
    Window = EventWindow()
    Select Window
      Case 0
        Select event
          Case #PB_Event_Gadget
            Select EventGadget()
              Case 1
                DisableWindow(0, 1)
                Dialogwindow()
               
              Case 2
                Secondwindow()
            EndSelect
           
          Case  #PB_Event_CloseWindow
            Quit = 1
        EndSelect
       
       
      Case 1
        Select event
          Case  #PB_Event_CloseWindow
            CloseWindow(1)
            DisableWindow(0, 0)
        EndSelect
       
       Case 2
        Select event
          Case  #PB_Event_CloseWindow
            CloseWindow(2)
        EndSelect       
       
       
    EndSelect
   
  Until Quit = 1
EndIf
End   


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mar 20/Nov/2012 21:56 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 1318
lit mon edit ^^ ( je regarde ce que tu as fait)

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mar 20/Nov/2012 22:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 1318
mon soucis, se situe au niveau de la complexité du code.
Quand tu modifies un fichier de 6500 lignes, faut vraiment savoir où sont les morceaux qui t'intéresse.

Ton code est intéressant, je n'ai jamais utilisé EventWindow() jusqu'à présent, je crois même que je viens de découvrir cette commande.
Si je devais recommencer je ne ferais sans doute pas de la même façon, mais dans ce cas précis il y a bcp trop de chose que je dois mettre dans la boucle de traitement principal pour y insérer les autres fenêtres.

On peux pas régler ça avec un select EventWindow() tout propre ...

tant pis. Tant que mon code fonctionne je n'y toucherais pas en profondeur, et si les versions de pb bloque de façon majeur son fonctionnement je resterais à la dernière qui compile.

merci pour vos réponses.

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Dernière édition par graph100 le Mer 17/Avr/2013 1:47, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mer 17/Avr/2013 1:47 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 1318
Je cite de l'aide de PB 5.11 pour WindowEvent()
Citation:
Quand une fenêtre est ouverte dans un thread, le thread doit appeler WindowEvent() ou WaitWindowEvent() dans une boucle pour gérer les évènements pour cette fenêtre, car les évènements des fenêtres sont propres à chaque thread.


....

Et pourquoi je suis tombé là dessus, parce que j'en ai besoin.
Je ne veux pas passer par une callback, et j'en ai besoin sous windows. Je trouve dommage de remonter une erreur par le débugger alors que c'est un truc qui devrais être comme les callback, spécifique à window.

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mer 17/Avr/2013 18:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3702
Je ne demande qu'à te croire, donne moi une situation où l'utilisation d'une fenêtre dans un thread est nécessaire.

Il est vrai que c'est dans l'aide mais pour avoir suivi un topic sur le forum anglais, beaucoup se plaignait des erreurs de compilation du debugger qui ne permet pas de faire ça (à moins de désactiver celui ci dans cette portion de code), de plus il a bien été indiqué que si effectivement tu pouvais faire ça pour window, en aucun cas c'était réalisable pour linux ou mac d'où l'erreur du debugger. Pourquoi sur window, il serait nécessaire de faire ce truc alors que sur les autres systèmes, cela n'a jamais été prévu?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mer 17/Avr/2013 20:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 21/Mai/2005 17:50
Messages: 1318
Je veux faire un truc pendant qu'on bouge une fenêtre. Or le déplacement d'une fenêtre est bloque le programme principale (sur window en tout cas).

Ce que je voudrais simplement souligner, c'est que c'étais possible avant, pourquoi l'enlever ? De plus maintenant désactiver le debugger ne suffit pas, le programme plante.
Je sais bien qu'il faut évoluer, mais je n'aime pas être limité ! C'est bien beau d'être multi-platforme, mais il ne faudrait pas être médiocre sur chacune, non plus...
Chaque OS a des utilisations propres, acceptons les :!:

_________________
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Purebasic 5.0 béta 8 Openwindow and switchdesktop
MessagePosté: Mer 17/Avr/2013 21:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3702
Citation:
Je veux faire un truc pendant qu'on bouge une fenêtre. Or le déplacement d'une fenêtre est bloque le programme principale (sur window en tout cas).

L'exemple de code que j'ai posté te montre que non; ça doit pas être difficile de poster un exemple simple de ton problème sinon.

Citation:
Chaque OS a des utilisations propres, acceptons les

Je suis d'accord avec ça, pourquoi on a pas la gestion du registre de window par exemple. On peut très bien utiliser du code spécifique pour une plateforme et du code généraliste pour les autres.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 16 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye