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 :

Thread OnTerminate Procedure


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 67
    Par défaut Thread OnTerminate Procedure
    Bonjour , j'ai crée un thread et une procedure onterminate ma fonction fonctionne dans une application standard par contre lorsque je l'utilise dans un active X, mon thread execute fonctionne mais pas mon onterminate. Je ne comprends pas pourquoi.
    Trouvez le code d'essai que j'ai réalisé.
    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
    CONSTRUcTOR TESSAI.CREATE(SUSPENDED:BOOLEAN);
    begin
    FreeOnterminate:=true;
    inherited create(suspended);
    onterminate:= onterminateprocedure;
     end;
     
    procedure TESSAI.Execute;
    begin
     
    sleep(20000) ;
     i:=10;
    end;
     
    procedure TESSAI.onterminateprocedure(sender :Tobject);
    begin
    i:=5000;
    end ;

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Sans pouvoir expliquer ce qui ce passe, tu peux toujours
    forcer cette fonctionnalitée de cette manière:

    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
     
    constructor TESSAI.CREATE(SUSPENDED:BOOLEAN);
    begin
      FreeOnterminate:=true;
      inherited create(suspended);
      OnTerminate:= OnTerminateProcedure;
    end;
     
    procedure TESSAI.Execute;
    begin
      try 
        sleep(20000) ;
        i:=10;
      finally
        DoTerminate; //Force l'execution de OnTerminate() 
      end;
    end;
    Il y a surment un context particulier du fait qu'on est dans un ActiveX...
    mais ca, j'y connais pas grand chose...

    Faut dire que OnTerminate est appelé avec la méthode Synchronize...
    c'est peut-être elle qui fait des problèmes dans un ActiveX...
    Si c'est le cas, le code que je viens de citer ne fonctionnera pas non plus

    Il te reste alors la possibilité d'appeler directement ta procedure dans
    la portion finally ce qui implique d'enlever l'assignation à OnTerminate.

    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
     
    constructor TESSAI.CREATE(SUSPENDED:BOOLEAN);
    begin
      FreeOnterminate:=true;
      inherited create(suspended);
      //OnTerminate:= OnTerminateProcedure;
    end;
     
    procedure TESSAI.Execute;
    begin
      try 
        sleep(20000) ;
        i:=10;
      finally
        OnTerminateProcedure(Self); //call directe la fonction sans synchronize   
      end;
    end;
    Je crois que le 2ème code devrait régler ton problème.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

Discussions similaires

  1. [WD18] Multiple thread executant meme procedure
    Par vegetacherif dans le forum WinDev
    Réponses: 8
    Dernier message: 03/07/2014, 15h45
  2. threads procedure exterieur
    Par ouiouioui dans le forum Langage
    Réponses: 2
    Dernier message: 04/09/2008, 11h18
  3. Transformer une procedure en thread
    Par defluc dans le forum Langage
    Réponses: 5
    Dernier message: 27/02/2008, 19h45
  4. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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