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

  1. #1
    Membre régulier
    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é
    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