IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Application réseau avec interface graphique


Sujet :

Ada

  1. #1
    Invité
    Invité(e)
    Par défaut Application réseau avec interface graphique
    Bonjour à tous.

    Vous connaissez peut-être le projet, il s'agit de Warborg, un wargame écrit avec Ada et GtkAda fonctionnant en réseau.

    Je voudrais ré- écrire ce programme simplement pour l'écrire mieux.

    Actuellement le code pose quelque problème de rafraîchissement lors des appels au serveur qui ne répond pas toujours immédiatement, ce qui empêche l'affichage de la fenêtre.
    Je viens vous voir pour avoir votre avis sur la bonne méthode à adopter pour remédier à se problème.

    Je pense donc écrire d'un côté le client réseau, de l'autre l'interface graphique, et une interface entre les deux pour donner de la souplesse à l'interface graphique.
    Mais ai-je bonne vue, moi qui n'ai de 2 ans d'étude en programmation.
    Merci pour vos réponses.

  2. #2
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Pourquoi ne pas mettre en place du "multihreading" et un mécanisme d’événements pour la partie requêtes réseau afin de ne pas bloquer l'interface ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Blackknight Voir le message
    Pourquoi ne pas mettre en place du "multihreading" et un mécanisme d’événements pour la partie requêtes réseau afin de ne pas bloquer l'interface ?
    Bonjour Blackknight,

    Merci pour ta réponse.
    En fait je comprend à peine la question.

    J'ai décrit grosso modo, une implémentation en 3 couches, j'ai bien l'intention d'utiliser deux tache pour les deux couches inférieurs, soit la couche client réseau et la couche interface, mais je ne vois pas ou faire du multithreading et pourquoi ?

    Et malheureusement, je ne vois pas du tout ce que tu entends pas "mécanisme d'évènements".

    Si tu pouvais développer, merci.

  4. #4
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Et bien si tu comptes utiliser deux tâches, c'est déjà du "multithreading".
    Tu peux ensuite faire communiquer tes deux tâches via un objet protégé par exemple.
    Par exemple, tu utilises un file FIFO dans laquelle la tâche réseau vient écrire les modifications. La tâche d'interface graphique vient ensuite vérifier dans la file s'il y a quelque chose à afficher.

    L'autre possibilité, la programmation évènementielle, consiste à enregistrer ton interface graphique auprès de ta tâche réseau pour que celle-ci la prévienne (en appelant une "callback" ou fonction de rappel) d'un changement.
    C'est ce que tu utilises quand tu enregistres en GtkAda une fonction pour répondre à l'action sur un bouton.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Blackknight Voir le message
    Et bien si tu comptes utiliser deux tâches, c'est déjà du "multithreading".
    Tu peux ensuite faire communiquer tes deux tâches via un objet protégé par exemple.
    Par exemple, tu utilises un file FIFO dans laquelle la tâche réseau vient écrire les modifications. La tâche d'interface graphique vient ensuite vérifier dans la file s'il y a quelque chose à afficher.
    C'est un peu ce que je fait. Mais je cherche à amélioré mon approche.
    Citation Envoyé par Blackknight Voir le message
    L'autre possibilité, la programmation évènementielle, consiste à enregistrer ton interface graphique auprès de ta tâche réseau pour que celle-ci la prévienne (en appelant une "callback" ou fonction de rappel) d'un changement.
    C'est ce que tu utilises quand tu enregistres en GtkAda une fonction pour répondre à l'action sur un bouton.
    Ca ça m'intéresse aussi, comment procéder je comprend pas.
    J'ai déjà essayer d'écrire dans une interface depuis une tache, ça plantait.

  6. #6
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2009
    Messages : 214
    Points : 383
    Points
    383
    Par défaut
    Ca ça m'intéresse aussi, comment procéder je comprend pas.
    J'ai déjà essayer d'écrire dans une interface depuis une tache, ça plantait.
    Et bien, c'est normalement plus ou moins ça et ça ne devrait pas planter. Aurais-tu encore le message associé au plantage ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ah non, j'ai pas de message d'erreur, c'était pas un problème d'erreur mais un problème de rafraîchissement.

    Lorsque je fais une requête sur le réseau par exemple, le temps de la réponse, la fenêtre n'est pas rafraîchie.
    Et ça reste un problème.

    En réalité, je viens d'y réfléchir, le problème viens de mon protocole de communication.

    Je requête le réseau et j'attends la réponse immédiatement.
    Alors que si je faisait la requête et que je bouclait sur l'attente de la réponse... peut-être que c'est faisable en installant un timeout.
    Je vais voir.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re-


    Alors, j'ai encore fait autrement, parce que tant que le réseau ne répond pas je peux pas rafraîchir ma page.

    Donc, j'ai mis mon appel au réseau dans une tache qui au retour de la requête ferme une boite de dialogue "Please, Wait..."

    Comme ceci.
    Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    --
               declare
     
     
                   task Deamon is
                   end Deamon;
     
                   task body Deamon is
     
                   begin
                      null; -- Launch -- reset system.                                                                                                                                                                  
                      Norad.Wopr.launch(To_Pointer(Main_Window).Wopr, Success);
                      Gtk.Dialog.response(Wait_Dialog, Gtk.Dialog.Gtk_Response_Cancel);
                   end Deamon;
                begin
                   case Gtk.Dialog.Run(Wait_Dialog) is
                      when others =>
                         Gtk.Dialog.Destroy(Wait_Dialog);
                   end case;
                end;

Discussions similaires

  1. [Projet en cours] Warborg : wargame en réseau avec interface graphique
    Par Invité dans le forum Projets
    Réponses: 42
    Dernier message: 03/10/2013, 10h34
  2. conception d'une application avec interface graphique en c
    Par AngeAbstraction dans le forum Débuter
    Réponses: 6
    Dernier message: 28/09/2012, 15h36
  3. Réponses: 8
    Dernier message: 31/05/2011, 16h06
  4. Débugger avec interface graphique
    Par powerpsy dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 03/05/2006, 22h53
  5. Application multiplateforme avec interface graphique
    Par TNorth dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 31/01/2004, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo