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 :

Simple fonction avec résultat (Thread)


Sujet :

Delphi

  1. #1
    Inactif
    Inscrit en
    Juillet 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 29
    Points : 1
    Points
    1
    Par défaut Simple fonction avec résultat (Thread)
    Salut à tous,
    J'ai lu quelques tutoriels et exemples qui parle de thread en Delphi mais c’est très compliqué tous ce que je veux faire c'est exécuter une simple fonction dans un thread séparé et avoir le résultat dans mon application ..
    Edit: j'ai trouvé la solution
    http://www.phidels.com/php/index.php...41c2b4a01461ac

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Le sujet DELPHI XE + scrute dossiers et sous dossiers utilise un Thread !
    le thread propose la méthode Add pour fournir des éléments au fur et à mesure, avec une protection de l'accès concurrentiel avec la boucle Execute

    le sujet Première tentative de multithread, ouch ! propose plusieurs approche de synchronisation, par événement, par liste de travail, ainsi que toute la démarche de recherche pour créer un thread avec la problématique d'accès concurrentiel inter-thread

    le sujet [XE] Calculer le temps de traitement d'une fonction montre le principe d'encapsulation pour créer un proxy d'appel à une fonction, ce principe peut être adapté au thread, comme le code ci-dessous

    Tout cela peut se résumer, à transformer la fonction en procedure TThread.Execute
    D'ajouter un membre publique qui contiendra la résultat rempli par TThread.Execute
    D'utiliser OnTerminate ou son propre Event pour savoir quand lire le résultat
    Le Passage de paramètre se fait de la même façon, via le constructeur et des membres privés, exemple

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    type
      TZLResultEvent = procedure(Sender: TObject; const ResultValue: string) of object;
     
      TZakaria = class(TThread)
      private
        FParam1: Double; 
        FParam2: Integer;
        FResult: string;
        FOnResult: TZLResultEvent;
     
        procedure DoResult();
      protected
        procedure Execute(); override;
      public 
        constructor Create(AParam1: Double; AParam2: Integer; AOnResult: TZLResultEvent);  
      end; 
     
    constructor TZakaria.Create(AParam1: Double; AParam2: Integer; AOnResult: TZLResultEvent);    
    begin
      inherited Create(False);
      FreeOnTerminate := True;
     
      FParam1 := AParam1; 
      FParam2 := AParam2; 
      FOnResult := AOnResult;  
    end;
     
    procedure TZakaria.Execute(); 
    begin
      if AParam2 = 0 then
        FResult := FloatToStr(AParam1 * AParam1);
      else
        FResult := FloatToStr(AParam1 / AParam2);
     
      Synchronize(DoResult);
    end;
     
    procedure TZakaria.DoResult(); 
    begin
      if Assigned(FOnResult)
        FOnResult(Self, FResult);  
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      TZakaria.Create(1.01, 2, ZLResultEventHandler);
    end;
     
    procedure TForm1.ZLResultEventHandler(Sender: TObject; const ResultValue: string);
    begin
      ShowMessage(ResultValue);
    end;

Discussions similaires

  1. [Encodage] test simple avec résultat inattendu
    Par paragoge dans le forum Langage
    Réponses: 4
    Dernier message: 16/05/2010, 11h52
  2. Résultat d'une fonction avec print
    Par mobidyc dans le forum Langage
    Réponses: 4
    Dernier message: 30/08/2009, 16h50
  3. Réponses: 3
    Dernier message: 24/11/2008, 14h35
  4. [Smarty] convertir une simple fonction pour réutiliser avec Smarty
    Par yaz1234 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 06/11/2008, 15h16
  5. probleme avec une simple fonction
    Par francky57 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/10/2008, 11h01

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