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

Langage Delphi Discussion :

Création events pour thread


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Création events pour thread
    Bonsoir à tous,

    j'ai un soucis depuis plusieurs jours : j'ai créer un Thread dans mon projet et j'aimerais savoir comment déclencher et appeler des événements.

    Une des événements servirait à écrire des logs dans un fichier texte et l'autre ajouter une ligne à une ListBox, donc depuis le Thread il faudrait déclencher l'événement avec comme paramètre un string "status".

    Le problème étant le suivant : je n'ai jamais créer d'événements (à part événement button.OnClick, etc...) et ne sait pas par ou commencer, j'ai bien évidemment chercher de longues heures sur Google mais je n'arrive à rien.

    En espérant avoir été explicite et recevoir une réponse au plus vite, je vous souhaite à tous une excellente soirée.

  2. #2
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Bon, en un mot tu commences par définir le prototype qu'aura le gestionnaire d'événement en définissant un type "procedure of object" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    type
      TNotifyMessage = procedure(sender : TObject; Msg : string) of object;
    Puis dans l'objet qui va déclencher l'événement, tu déclares une propriété avec le type que tu as déclaré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type
      TMonThread = class(Thread)
      private
        FOnMessage : TNotifyMessage;
      public
        property OnMessage : TNotifyMessage read FOnMessage write FOnMessage;
    Ensuite pour déclencher l'événement, tu te contentes d'appeler le gestionnaire d'événement. Attention, avant de faire l'appel, il faut tester s'il a été assigné.

    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
     
    type
      TMonThread = class(Thread)
      private
        FOnMessage : TNotifyMessage;
      protected
        procedure DoMessage(msg : string); virtual;
      public
        property OnMessage : TNotifyMessage read FOnMessage write FOnMessage;
      end;
     
    ...
     
    procedure TMonThread.DoMessage(msg : string);
    begin
      if Assigned(FOnMessage)
      then FOnMessage(self, msg);
    end;
    Attention cependant, ça c'est la gestion des événements classique de Delphi.
    Dans ton cas de figure, tu te trouves dans un Thread !
    Lorsque le thread va déclencher l'événement, le gestionnaire d'événement associé va s'exécuter dans le contexte du thread. C'est à dire que c'est le thread qui exécute le gestionnaire de l'événement.
    Tu dois donc respecter les même contraintes que pour le thread. En particulier, tu ne dois pas manipuler de composants visuels de la VCL dans le gestionnaire d'événement. Ca veut aussi dire que tu ne dois pas écrire dans la listbox depuis le thread secondaire.

    Donc a ta place, je ne travaillerais pas avec des événements. Je définirais plutôt un TStrings dans le thread pour mémoriser les messages à loguer, puis je posterais un message windows au thread pricipale pour lui dire que la liste a changé et qu'il faut venir la lire pour traiter les nouveaux messages (attention à bien gérer l'exclusion mutuelle sur cette liste intermédiaire).

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    merci pour cette réponse et désolé pour la réponse tardive. Je suis aux études et je suis de retour au bureau pour 1 ou 2 semaines de travail car je suis en vacances...

    Tu dis qu'à ma place du ferais pas comme ca... Pourrais-tu m'expliquer de manière plus claire, comment tu ferais pour 1, loguer les infos et 2, ajouter une sorte de "status" à ma ListBox ?

    Encore merci pour cette réponse,
    syphon

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par syphon22 Voir le message
    Bonjour,

    merci pour cette réponse et désolé pour la réponse tardive. Je suis aux études et je suis de retour au bureau pour 1 ou 2 semaines de travail car je suis en vacances...

    Tu dis qu'à ma place du ferais pas comme ca... Pourrais-tu m'expliquer de manière plus claire, comment tu ferais pour 1, loguer les infos et 2, ajouter une sorte de "status" à ma ListBox ?

    Encore merci pour cette réponse,
    syphon

    Encore une chose, pour être plus précis :

    J'exécute un thread depuis mon Main (fenêtre principale) et j'aimerais mettre à jour une ListBox de ce Main après chaque opération et loguer les infos dans un fichier texte que je modifie depuis le Main.

    D'avance merci pour vos messages

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2006, 13h02
  2. Création DLL pour utilisation sur VBA
    Par Fbartolo dans le forum C++Builder
    Réponses: 1
    Dernier message: 21/11/2005, 20h44
  3. Création vertex pour affichage en Triangle Strips
    Par ReiKiss dans le forum DirectX
    Réponses: 2
    Dernier message: 09/11/2005, 10h31
  4. Création installer pour programme
    Par yanndublanche dans le forum Windows
    Réponses: 7
    Dernier message: 11/10/2005, 00h29
  5. création de plusieurs threads dans WinMain
    Par ChidoriRasengan dans le forum DirectX
    Réponses: 1
    Dernier message: 15/06/2005, 21h36

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