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 :

Boucle infinie dans l'unité Forms : Processeur à 50%


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 157
    Points : 84
    Points
    84
    Par défaut Boucle infinie dans l'unité Forms : Processeur à 50%
    Bonjour,
    Mon application ouvre une nouvelle fenêtre et affiche un formulaire Web dans un TWebBrowser. Ensuite quand je click sur un lien, je fais mon traitement et ensuite je ferme ma fenêtre.

    Et là j'ai un problème, ma fiche principale prend la main, et tout est normal. Sauf si je regarde mon processeur qui lui travail à 50% pour mon programme.

    Quand je trace le code, je vois qu'il boucle non stop dans la méthode TApplication.Run de l'unité Forms

    Voici le code et la boucle qui pose problème est en rouge.

    Merci

    procedure TApplication.Run;
    begin
    FRunning := True;
    try
    AddExitProc(DoneApplication);
    if FMainForm <> nil then
    begin
    case CmdShow of
    SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
    SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
    end;
    if FShowMainForm then
    if FMainForm.FWindowState = wsMinimized then
    Minimize else
    FMainForm.Visible := True;
    repeat
    try
    HandleMessage;
    except
    HandleException(Self);
    end;
    until Terminated;
    end;
    finally
    FRunning := False;
    end;
    end;

  2. #2
    Membre confirmé
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Points : 647
    Points
    647
    Par défaut
    Bonjour.

    Normal à mon avis. La boucle est tellement rapide qu'elle monopolise le systeme.


    Si tu veux faire un code qui bloque completement l'odinateur tu fais un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Var
         I : Boolean;
     
    begin
        I := True;
        Repeat
        Until I = False;
    end;
    Corrige ton code afin de laisser les messages WINDOWS remonter.
    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
     
    procedure TApplication.Run;
    begin
    FRunning := True;
    try
    AddExitProc(DoneApplication);
    if FMainForm <> nil then
    begin
    case CmdShow of
    SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
    SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
    end;
    if FShowMainForm then
    if FMainForm.FWindowState = wsMinimized then
    Minimize else
    FMainForm.Visible := True;
    repeat
    Application.ProcessMessage;
    try
    HandleMessage;
    except
    HandleException(Self);
    end;
    until Terminated; end;
    finally
    FRunning := False;
    end;
    end;
    Rien n'est moins sur que l'incertain : Pierre DAC

Discussions similaires

  1. Héritage boucle infinie dans une dll
    Par MABB dans le forum C++
    Réponses: 11
    Dernier message: 11/06/2009, 21h29
  2. Boucle Infinie dans le Sudoku
    Par HqSeO dans le forum Mathématiques
    Réponses: 7
    Dernier message: 12/02/2009, 13h42
  3. Réponses: 29
    Dernier message: 17/06/2006, 13h04
  4. symptome de la boucle infinie dans une requete
    Par ouam81 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/05/2005, 12h10
  5. Réponses: 15
    Dernier message: 24/05/2005, 08h34

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