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 :

Problème avec un thread et le refresh de la fenêtre ?


Sujet :

Delphi

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut Problème avec un thread et le refresh de la fenêtre ?
    Bonjour,

    Je souhaite faire une fenêtre d'attente pendant l'execution d'une requête SELECT qui est un peu longue.
    Pour ce faire, j'ai suivi les explications se trouvant dans le tutorial suivant :
    http://lberne.developpez.com/delphi/...us_threads.pdf

    Mon problème, c'est que la barre de progression n'avance pas...



    Voici mon code :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    unit MThreadWait;
     
    interface
     
    uses
      Forms, Classes, MWait, SysUtils;
     
    type
      ThreadWait = class(TThread)
      private
        { Déclarations privées }
        FWait : TFWait;
        procedure OnTerminateProcedure(Sender : TObject);
      protected
        procedure Execute; override;
      public
        constructor Create(Suspended : Boolean);
      end;
     
    implementation
     
    { Important : les méthodes et propriétés des objets de la VCL peuvent uniquement
      être utilisés dans une méthode appelée en utilisant Synchronize, comme :
     
          Synchronize(UpdateCaption);
     
      où UpdateCaption serait de la forme 
     
        procedure ThreadWait.UpdateCaption;
        begin
          Form1.Caption := 'Mis à jour dans un thread';
        end; }
     
    { ThreadWait }
     
    procedure ThreadWait.Execute;
    begin
         repeat
              if FWait.JvXPProgressBar1.Position < 100 then
                   FWait.JvXPProgressBar1.Position := FWait.JvXPProgressBar1.Position + 1
              else
                   FWait.JvXPProgressBar1.Position := 0;
              FWait.Refresh;
              Application.ProcessMessages;
         until true;
    end;
     
    constructor ThreadWait.Create(Suspended: Boolean);
    begin
         FreeOnTerminate := True;
         inherited Create(Suspended);
         FWait := TFWait.Create(nil);
         FWait.Show;
         OnTerminate := OnTerminateProcedure;
    end;
     
    procedure ThreadWait.OnTerminateProcedure(Sender: TObject);
    begin
         if Assigned(FWait) then FWait.Release;
    end;
     
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MyThreadWait := ThreadWait.Create(false);
    FPrincipale.ClientDataSetRecherche.Active := false;
    FPrincipale.ClientDataSetRecherche.CommandText := 'SELECT * FROM [...]';
    FPrincipale.ClientDataSetRecherche.Active := true;
    MyThreadWait.Terminate;
    J'ai pourtant bien mis le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FWait.Refresh;
    Application.ProcessMessages;
    Que dois-je faire ?

    Merci,
    Mathieu

  2. #2
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    J'ai résolu mon problème...

    J'ai ajouté un Sleep(80) et j'ai corrigé ma boucle dont la condition était toujours bonne pour en sortir

    Mathieu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec des threads
    Par rajuto dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 11/02/2007, 20h41
  2. Problème avec un thread (débutant en thread)?
    Par Jayceblaster dans le forum C#
    Réponses: 10
    Dernier message: 17/01/2007, 11h01
  3. Problèmes avec les thread et les pointeurs
    Par raspac dans le forum POSIX
    Réponses: 2
    Dernier message: 22/10/2006, 17h35
  4. [BOOST] Problème avec les threads
    Par SOAD08 dans le forum Dev-C++
    Réponses: 7
    Dernier message: 08/10/2006, 10h23
  5. Réponses: 5
    Dernier message: 10/05/2005, 10h22

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