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 :

Plantage programme delphi: Handle de fenêtre non valide


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut Plantage programme delphi: Handle de fenêtre non valide
    Bonjour,

    J'ai un petit programme Delphi que je lance sur mon pc et qui plante systématiquement. Je m'explique:
    - Le programme fait des calculs et discute avec une base de données, une fois que je le lance il tourne environ 5 min.
    - Sur mon pc de travail le processus plante au bout d'un moment (aléatoire à priori) et occupe 100% du cpu mais n'avance plus.
    - Sur mon pc portable le programme se déroule en entier sans soucis.

    Plus bizarre encore lorsque je force l'arrêt de mon programme une fois qu'il est planté ... c'est l'explorer.exe qui prend alors 100% du cpu !!! et cela uniquement sur mon pc de travail.
    J'ai parfois l'erreur suivante :
    "Erreur système, code : 1400 handle de fenêtre non valide"

    Je travail en multiécran (j'apporte cette précision car certaines recherches sur internet m'ont apporté des possibles erreurs due à cela.

    Si vous avez des idées je suis + que preneur !

    Merci

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Peux tu faire voir ton code qui fait le calcul ?
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Ce serait bien aussi de connaitre les différences entre les 2 PC :
    - taches de fond active (antivirus)
    - puissance de calcul (micro-processeur, carte graphique)

    ainsi qu'une description du plantage (écran bleu, ou "ce programme ne répond plus"-->utilisation indiquée de application.processmessage)

    Remplis tu une liste quelque part (TStringList, TListView, TMemo, TStringGrid -->utilisation des méthodes BeginUpdate, EndUpdate peut être nécessaire)

    etc...
    Merci
    Bidouilleuse Delphi

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut
    il n'y a pas qu'un calcul le code est assez complexe et je ne peux pax vraiment le copier coller ici. il y a des calculs et bcp d'accès à une base de données (distante).

    pour l'instant je ne l'ai testé que sur 2 pcs mais je vais le lancer sur d'autres pcs.

    sur mon pc de bureau (Pentium IV 3Ghz + 1Go de RAM GeForce 5200) il plante (y compris si je le lance tout seul au lancement de Windows) et sachant que j'ai formaté une première fois qd j'ai eu ce problème. Donc mon install est propre.

    Le plantage apparait sous la forme de ma fenêtre qui ne se rafraichit plus et par le fait que le processus prend 100% du cpu (en fait 50% car il y a l'hyperthreading). Lorsque je le fait CTR-F2 pour arrêter mon appli cela fonctionne mais c'est alors Explorer.exe qui prend 100% du cpu !!!

    Mon portable est un Core2Duo 2Ghz + 2GoRam + ATI X1400. La le programme tourne sans soucis.

    Je vais tester sur le poste de 2 collègues (dont un qui a 2 écrans également).

    Sinon oui j'utilise de nombreux objets et également des StringList.

    Merci pour votre aide

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Déjà, ce serait pas mal si, avant le remplissage de tes stringlist (rattachées ou nom à des composant graphiques : TMemo.Lines), tu écrive ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var MaListe:TStringList;
         Memo1:TMemo;
    ....
    //avant le traitement long
    MaListe.BeginUpdate;
    Memo1.Lines.BeginUpdate;
    ...
    //Traitement long
    for i:=0 to 150000 do
       MaListe.Add('Une Ligne de Texte');
    ...
    //après le traitement long
    MaListe.EndUpdate;
    Memo1.Lines.EndUpdate;
    Celà accélèrera sensiblement les traitements.

    De même, si tu parcours les champs d'une base de données et que tu as des contrôles DB-aware qui y sont reliés, ce ne serait pas un mal de désactiver l'affichage des données dans ces composants.
    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
    var MaTable:TTable;
    ...
    //avant le traitement long
    MaTable.DisableControls;
    ...
    //Traitement long
    MaTable.First;
    while not Matable.eof do
    begin
       Matable.FaireQuelqueChose(Lecture ou ecriture de donnees); //<--exemple fictif ;)
       MaTable.Next;
    end;
    ...
    //après le traitement long
    MaTable.EnableControls;

    Et sinon, laisse la main de temps en temps au système, en plaçant en fin de boucle dans ton traitement long, des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ProcessMessages;
    Celà évitera à Windows de se figer (dessin de la fenêtre et terminaison de processus) et te permettra de prendre la main sur ton programme pour l'arrêter (le message windows qui termine ton application lorsque tu tues son processus via le gestionnaire des tâches sera alors traité par ton programme)

    Honnêtement, ça devrait améliorer sensiblement les choses.
    Bidouilleuse Delphi

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Sinon, les messages du type Handle de fenètre non valide, ça craint
    Soit tu as créés beaucoup trop de contrôles fenétrés (TForm, TPanel, TLabel) et tu remplies la mémoire de windows chargée de gérer les handle de fenètre qui n'en peu plus.
    Soit tu recrées une instance d'un contrôle fenétré déjà existant (TForm, TPanel, TLabel), sans avoir pris soin de détruire l'instance déjà existante.
    Soit tu affecte accidentellement la propriété Handle d'un de tes contrôle fenétré (TForm, TPanel, TLabel); --> à éviter.
    Soit tu utilise des composants tierce partie mal codés ou mal adaptés à ta version de delphi (ça m'est déjà arrivé). D'ailleurs, ça m'est déjà aussi arrivé avec un ensemble d'experts (cnPack), j'ai désinstallé et tout est rentré dans l'ordre.
    Soit tu crés des instance de fenètre (handle de fenètres HWND) ou de resources graphiques (handle de dessin HDC avec la fonction windows GetDC) que tu ne libères jamais (ReleaseDC))

    Les raisons peuvent être multiples
    Bidouilleuse Delphi

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut
    oué c'est bizarre car ça ne le fait que sur mon pc ...
    j'ai testé sur 2 autres pcs ça ne le fait pas.

    et ce pc vient d'être formater ... bref vraiment bizarre.

    en plus je ne manipule pas de fenêtre ou autre handle ... une seule fenêtre est créé au démarrage.

    Je continu mes recherches.

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Peut être une mise à jour des pilotes de la carte graphique à faire, qui sait ?

    ...ou bien tout l'inverse, une version moins récente, mais plus stable.
    Bidouilleuse Delphi

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Tu dis que ton installation sur ta machine est neuve...
    Question stupide mais j'ai ce probleme ici avec une application qui
    utilise des QReports + Delphi 5.

    Est-ce que tu as une imprimante par défault d'installé?

    Installes-en une pour voir....
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut
    Salut,

    Alors après de nouveaux tests j'ai effectué les modifications (dans le code ... pour les drivers de la carte graph...) que vous m'avez indiqué (l'imprimante par défaut je l'avais déjà), bref ça plante toujours sur ma machine (et uniquement sur celle-ci à priori !!!).

    Dans mon programme j'ai une connexion ADOConnection à la base de données SQL Server ... est-il possible que le programme perde la connexion et tourne en boucle à cause de cela ? comment prévenir cela ?

    Encore merci pour votre aide

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut
    Bon alors après encore de nouveaux tests j'ai l'impression d'avoir trouvé d'ou cela vient.

    Cela viendrait bien du double écran et du pilote graphique Nvidia.

    J'ai désactivé le nview pour mon application et depuis ça tourne jusqu'au bout !

    Vraiment bizarre tout ça ! mais now ça marchouille !

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par [DreaMs]
    Bon alors après encore de nouveaux tests j'ai l'impression d'avoir trouvé d'ou cela vient.

    Cela viendrait bien du double écran et du pilote graphique Nvidia.

    J'ai désactivé le nview pour mon application et depuis ça tourne jusqu'au bout !

    Vraiment bizarre tout ça ! mais now ça marchouille !
    wouai !
    (je me disais bien aussi..., les pilotes...)
    Bidouilleuse Delphi

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

Discussions similaires

  1. [WD12] handle de fenêtre non valide
    Par gbzmt dans le forum WinDev
    Réponses: 4
    Dernier message: 05/11/2013, 11h02
  2. Handle de fenêtre non valide
    Par ired dans le forum Langage
    Réponses: 17
    Dernier message: 26/04/2010, 11h40
  3. Handle de fenêtre non valide
    Par bernie.noel dans le forum Langage
    Réponses: 5
    Dernier message: 18/03/2008, 18h48
  4. Réponses: 17
    Dernier message: 22/09/2006, 08h37
  5. Handle de fenètre non valide
    Par minnit_s dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/01/2006, 19h26

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