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

 Delphi Discussion :

[Débutant] EventQueue invoke


Sujet :

Delphi

  1. #1
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut [Débutant] EventQueue invoke
    Salut,

    Je ne fais pas du tout de delphi, mais pour expliquer les mécanisme de threading et de mise à jour d'interface graphique, j'aimerais bien savoir comment on fait ceci en delphi:
    - un thread reçoit des évènements d'une socket, et signale aux observeurs lorsque de nouvelles données sont disponibles (déjà programmé)
    - un objet "observer" qui reçoit les signaux, et qui doit mettre à jour la GUI.

    Le problème c'est qu'il ne doit pas mettre à jour la GUI dans le thread courant (qui est le thread de la socket), mais dans l'unique thread de l'interface graphique (en java l'EventDispatchThread). Comment faire ceci en delphi?

    En java, ça serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    EventQueue.invoke(new Runnable() {
    //ou SwingUtilities.invokeLater
        @Override
        public void run() {
             //le code
        }
    });
    Merci d'avance...

  2. #2
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Salut,

    Je sais pas si j'ai bien compris ce que tu as dit.

    Néanmoins, pour qu'un thread secondaire puisse mettre à jour le GUI, il faut utiliser la méthode Synchronize de l'objet TThread il me semble.

    Code : 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
     
     TSocketThread = class(TThread)
     public
      procedure UpdateGUI;
      procedure Execute; override;
     end;
     
    {...}
     
    procedure TSocketThread.UpdateGUI;
    begin
     {...} les observateurs mettent à jour le GUI ici
    end;
     
    procedure TSocketThread.Execute;
    begin
     // nouvelle donnée ici envoyer vers observer 
     Synchronize(UpdateGUI);
    end;
    Voilà, j'éspère que ca aide...

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Kaféine Voir le message
    Salut,

    Je sais pas si j'ai bien compris ce que tu as dit.

    Néanmoins, pour qu'un thread secondaire puisse mettre à jour le GUI, il faut utiliser la méthode Synchronize de l'objet TThread il me semble.
    Ce n'est pas "un thread secondaire", c'est "le thread dédié à l'interface graphique".
    Il n'y a pas de thread dédié à l'interface graphique en delphi ?

  4. #4
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    A priori non. Delphi s'appuie sur Windows pour la gestion des interfaces graphiques.

  5. #5
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Salut,

    Je pense comme philnext qu'il n'y a pas de thread dédié à l'interface graphique. Tout ce déroule dans le thread principal de l'application.

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Kaféine Voir le message
    Salut,

    Je pense comme philnext qu'il n'y a pas de thread dédié à l'interface graphique. Tout ce déroule dans le thread principal de l'application.
    Ça veut dire que plusieurs threads peuvent (potentiellement) modifier l'interface graphique "simultanément"?

  7. #7
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Citation Envoyé par ®om
    Ça veut dire que plusieurs threads peuvent (potentiellement) modifier l'interface graphique "simultanément"?
    Aujourd'hui 11h15
    oui je crois, c'est pourquoi il y a necessité d'utiliser la fonction synchronize de l'objet TThread lorsque l'on veut agir sur les composants de la vcl depuis un thread secondaire. Aprés c'est tous les outils de windows genre critical section, event, semaphore mutex servant à synchroniser les threads et proteger les ressources partagées.

Discussions similaires

  1. [Débutant] call.invoke et pièce jointe
    Par bannik dans le forum Services Web
    Réponses: 0
    Dernier message: 14/11/2008, 16h10
  2. [Kylix] Re Re: débutant sur Kylix et Linux.....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/06/2002, 22h53
  3. [Kylix] Le débutant en Kylix et Linux....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 10h37
  4. Réponses: 3
    Dernier message: 07/05/2002, 16h06
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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