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 :

Thread trop lent : 200ms !


Sujet :

Langage Delphi

  1. #1
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut Thread trop lent : 200ms !
    Bonjour,

    Le temps d'échange entre mon application et mon thread est de plus de 200ms !!!

    Je m'explique:
    Voici ce que j'ai dans ma boucle execute (j'ai simplifié au maximum) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Procedure TMyThread.Execute;
    Begin
      repeat
        if (StepRun = STEP_IDLE) then
        Begin
        End;
        if (StepRun = STEP_REQUEST) then
        Begin
          DataReady := true;
          StepRun := STEP_IDLE;
        end;
      until Terminated;
    End;
    et voilà ce j'ai dans ma fiche principale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DataReady:=false;
    StepRun := STEP_REQUEST;
    StartTime := GetTickCount;
    Repeat 
    Until DataReady;
    TempsEcoule := GetTickCount-StartTime;
    J'ai essayé d'autres priorités mais c'est pire ou alors l'application devient inexploitable par sa lenteur d'affichage.

    Y-a-t-il une explication à cela ???
    merci de votre aide.
    Franck

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 815
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 815
    Points : 13 532
    Points
    13 532
    Par défaut
    Tu as deux boucles qui tournent à fond. En mettant des sleep, ce serait déjà mieux.
    Mais ce serait encore mieux avec des Events

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    uses SyncObjs;
     
    var
      StartEvent :TEvent;
      ReadyEvent :TEvent;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      StartEvent := TEvent.Create(nil, TRUE, FALSE, 'MyStart_Event');
      ReadyEvent := TEvent.Create(nil, TRUE, FALSE, 'MyReady_Event');
      ...
    end;
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      StartTime :integer;
      Elapsed   :integer;
     
    begin
      StartTime := GetTickCount;
     
      StartEvent.SetEvent;
      ReadyEvent.WaitFor(INFINITE);
      ReadyEvent.ResetEvent;
     
      //Traitement
     
      Elapsed:= GetTickCount -StartTime;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TMyThread.Execute;
    begin
      while not Terminated do
      begin
        StartEvent.WaitFor(INFINITE);
        StartEvent.ResetEvent;
     
        //Traitement
     
        ReadyEvent.SetEvent;
      end;

  3. #3
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    GE - NIAL !
    rien qu'en mettant des sleep(0) dans la boucle du main et dans la procedure execute du thread, j'ai un temps quasi nul !!!
    Mais si tu dis que les events, c'est mieux, je vais voir ça.
    MERCI !!!!!

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/02/2007, 08h51
  2. Convolution trop lente...
    Par progfou dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 05/08/2006, 11h44
  3. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  4. [SAGE] ODBC trop lent
    Par tileffeleauzed dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/11/2004, 09h56
  5. Envoi de mail trop lent
    Par MASSAKA dans le forum ASP
    Réponses: 3
    Dernier message: 15/10/2004, 10h57

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