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 :

Dépassement de pile et Application.ProcessMessages


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut Dépassement de pile et Application.ProcessMessages
    Bonjour à tous,

    j'ai fait mon propre Sleep comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure MySleep(x : integer);
    var i : integer;
    Begin
      for i:=1 to x do
      Begin
        Application.ProcessMessages;
        Sleep(1000);
      end;
    End;
    C'est une proc que j'appelle assez souvent, mais voilà au bout d'un certain temps j'ai une stack Overflow error ?!

    Par contre si je mets uniquement Sleep(1000) sans passer par une proc. je n'ai pas cette erreur.

    Croyez vous que mon erreur peut provenir de l'utilisation trop régulière de Appl.ProcessMessage ??

    Merci pour vos conseils.

    Bruno

  2. #2
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Certainement que ton MySleep est appelé depuis un évènement (MouseMouve, Clic, KeyDown, Paint, etc....), dont le redéclenchement est autorisé par ton Application.Processmessage, qui , du coup rappelle ton MySleep, etc... = boucle infinie mon grand, ne cherche plus

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut
    Salut Wascol,

    A priori je ne fais pas d'appel autre part. J'utilise bien proprement mon MySleep. De toute manière le probleme a été résolu d'une tout autre maniere n'ayant rien à voir avec le sleep.

    Merci qd pour ta réponse.

    Bruno

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 001
    Par défaut
    @Bruno13, jamais waskol n'a incriminé le sleep, mais le processmessages ...

    le grand classique, c'est dans un évènement tu fait appelle à un application processmessages, ou alors dans ton évènement tu fait appelle à une méthode, qui provoque l'appel du même évènement, genre onDataChange d'un TDataSource, dans gestionnaire tu modifie la valeur, donc évènement, et dans ce cas la résolution classique est l'affectation à nil du gestionnaire avec un try finally pour le réaffecter ...

    Sinon, il faut différencier les évènements en deux catégories, ceux qui sont des messages Windows ou Delphi (OnDataReceive, OnScroll, OnMouseMove, ...) et ceux qui sont appelé dans une méthode par ce que c'est le fonctionnement de l'objet qui veut ça (OnCreate, OnDataChange, ...)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Application.ProcessMessages dans une table
    Par sondo dans le forum Bases de données
    Réponses: 11
    Dernier message: 04/02/2007, 14h16
  2. Blocage même avec Application.ProcessMessages
    Par Sub0 dans le forum Delphi
    Réponses: 7
    Dernier message: 31/01/2007, 05h13
  3. Récursivité et dépassement de pile...
    Par MasterOfChakhaL dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 17/05/2006, 01h11
  4. problème avec Application->ProcessMessages()
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/08/2005, 10h27
  5. [D7] Dépassement de pile à l'impression avec Quick Report
    Par Bigbaloo dans le forum Composants VCL
    Réponses: 8
    Dernier message: 16/03/2005, 00h28

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