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

WinDev Discussion :

[WD11] Fenetre qui ne s'ouvre pas


Sujet :

WinDev

  1. #1
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut [WD11] Fenetre qui ne s'ouvre pas
    Bonjour,

    Je travaille sur une application multithreadé. J'ai en tout 4 threads pour mes besoins + 1 thread primaire (IHM, clic bouton, survol champs,...)

    De temps en temps je ne sais pas pourquoi lorsque je clic sur un bouton de ma fenetre principale dont le code est :

    J'ai le sablier qui s'affiche et biensur la fenetre ne s'ouvre jamais et ca reste comme cela indéfiniment...

    Est-ce que c'est dû à WDTest, aux threads, aux GFX ?

    Aujourd'hui je n'ai jamais rencontré ce probléme en production mais ca craint un max

    Comment faire pour palier à ce probléme ?

    Merci

  2. #2
    Membre habitué Avatar de Christophe.LOGEL
    Homme Profil pro
    Expert WinDev / WebDev
    Inscrit en
    Mars 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Expert WinDev / WebDev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 121
    Points : 182
    Points
    182
    Par défaut
    Bonjour,

    Etant donné que l'on ne connait pas le code des threads difficile de donner une réponse. Néanmoins, je pense que cela est lié aux threads en cours d'exécution (Il doit y avoir un conflit à un moment donné entre 1 thread et l'ouverture de la fenêtre fille). La fenêtre fille lance t'elle des threads ?

    Bon dév.,

    Totof
    www.sigmasys.fr
    www.sigmasys.eu

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Non les threads sont lancés au démarrage ensuite plus aucun n'est lancé. De même aucun thread n'ouvre de fenetre. Ce sont vraiment des tâches de fond type acquisition des données, affichage et archivage

  4. #4
    Membre habitué Avatar de Christophe.LOGEL
    Homme Profil pro
    Expert WinDev / WebDev
    Inscrit en
    Mars 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Expert WinDev / WebDev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 121
    Points : 182
    Points
    182
    Par défaut
    Re,

    Est ce que les threads utilisent des objets présent sur des fenêtres ?

    Bon dév.,

    Totof
    www.sigmasys.fr
    www.sigmasys.eu

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Oui en lecture.

    C'est à dire que j'ai un objet déclaré dans ma fenetre principal et que 2 threads y accèdent en lecture. (On ne parle pas des structures qui sont aussi partagés mais qui sont globales )

  6. #6
    Membre habitué Avatar de Christophe.LOGEL
    Homme Profil pro
    Expert WinDev / WebDev
    Inscrit en
    Mars 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Expert WinDev / WebDev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 121
    Points : 182
    Points
    182
    Par défaut
    Re,

    Il faudrait à mon avis externaliser cela en variables globales au projet. Cela évitera les mauvaises surprises

    Bon dév.,

    Totof
    www.sigmasys.fr
    www.sigmasys.eu

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Ca changerait quelque chose si je mettais cet objet en gloabale ? Je l'avais mis en local de la fenetre dans un objectif futur mais à priori cela ne se fera pas donc.

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par Christophe.LOGEL
    Re,

    Il faudrait à mon avis externaliser cela en variables globales au projet. Cela évitera les mauvaises surprises

    Bon dév.,

    Totof
    www.sigmasys.fr
    www.sigmasys.eu
    Tu as déja eu un souci semblable ?

  9. #9
    Membre habitué Avatar de Christophe.LOGEL
    Homme Profil pro
    Expert WinDev / WebDev
    Inscrit en
    Mars 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Expert WinDev / WebDev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 121
    Points : 182
    Points
    182
    Par défaut
    Re,

    Il fut un temps, je mettais bien amusé avec les threads lors de la création d'un superviseur de circuit de production robotisé. J'en ai vu de toutes les couleurs, je connais maintenant les choses à faire et surtout à ne pas faire avec les threads.
    Exemple : Ne pas laisser la possibilité que 2 threads puissent lire en simultané une variable (même si elle est uniquement en lecture). Il faut géré une file d'attente pour accèder à la variable car la fonction SectionCritique empêche certe la lecture/ecriture simultanée, mais passe à la trappe la demande de lecture/ecriture de la variable.
    Utilisez des variables globales pour l'échange de données inter-threads.
    Pour ouvrir une fenêtre depuis un thread, il faut gérer un évenement dans la fenêtre principale qui ouvrira la fenêtre après la demande émise par le thread.

    Bon dév.,

    Totof
    www.sigmasys.fr
    www.sigmasys.eu

  10. #10
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par Christophe.LOGEL

    Exemple : Ne pas laisser la possibilité que 2 threads puissent lire en simultané une variable (même si elle est uniquement en lecture). Il faut géré une file d'attente pour accèder à la variable car la fonction SectionCritique empêche certe la lecture/ecriture simultanée, mais passe à la trappe la demande de lecture/ecriture de la variable.
    Là je ne te suis pas. J'ai une variable globale d'une class (qui est une pile en fait) par laquelle j'accède via des sections critiques dans les différents threads et fenêtres du projet. Par contre je pose toujours ma section critique AVANT d'accèder à ma variable que se soit en lecture ou écriture donc normalement 2 threads n'y accéderont jamais en simultané

    Utilisez des variables globales pour l'échange de données inter-threads.
    C'est ce que j'ai fais de toute façon ce serait se compliquer la vie pour rien pour pas grand chose que de faire autrement.


    Pour ouvrir une fenêtre depuis un thread, il faut gérer un évenement dans la fenêtre principale qui ouvrira la fenêtre après la demande émise par le thread.
    Jamais fait encore mais c'est comme cela aussi que je ferais

    En tout cas j'ai corrigé cela depuis le temps que je voyais traîner cet objet

  11. #11
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Le probléme avec ces problémes c'est que c'est difficilement reproductible ce qui fais que maintenant il va falloir que je délégue cette tâche...à mes utilisateurs

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Comme Bill Gates

    Espérons que tu auras aussi ses revenus

  13. #13
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par Guardian
    Comme Bill Gates

    Espérons que tu auras aussi ses revenus
    Ca ferait bien plaisir

    Je mets ce post résolu tant que cela ne se reproduit pas j'en concluerais que le probléme venait de là auquel cas ouille ouille ouille

  14. #14
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    J'ai parlé trop vite c'est revenu

    Clic sur un bouton et paf sablier attente infini...

  15. #15
    Membre habitué Avatar de Christophe.LOGEL
    Homme Profil pro
    Expert WinDev / WebDev
    Inscrit en
    Mars 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Expert WinDev / WebDev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 121
    Points : 182
    Points
    182
    Par défaut
    Là je ne te suis pas. J'ai une variable globale d'une class (qui est une pile en fait) par laquelle j'accède via des sections critiques dans les différents threads et fenêtres du projet. Par contre je pose toujours ma section critique AVANT d'accèder à ma variable que se soit en lecture ou écriture donc normalement 2 threads n'y accéderont jamais en simultané
    D'après mes tests, j'ai réalisé qu'en utilisant des sections critiques on empêche la lecture/écriture simultanée d'une variable (OK), mais si par exemple 2 threads parallèles veuillent savoir en même temps si un booléen est à vrai et que la variable vient de passer de faux à vrai, le thread 1 aura l'information vrai et le thread 2 aura l'information faux. Après tout dépend de la fréquence de vérification des threads et de l'importance de la vitesse de traitement des données, mais quand on fait du temps réel on a pas droit à l'erreur.

    P.S.: Si tu peux faire "patienter tes threads", tu peux mettre un petit mutitache(-10) dans la boucle.

    Bon dév.,

    Totof
    www.sigmasys.fr
    www.sigmasys.eu

  16. #16
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    J'ai un ThreadPause(100) à la place.

    Pour les sections critiques normalement lorsque un thread pose le verrou c'est terminé plus aucun thread de l'application ne peut le poser et ils se retrouvent donc bloquer s'ils cherchent à le faire.

    Maintenant effectivement il convient d'être trés prudent dans la manipulation des sections critiques car comme tu dis dans un système temps réel (et c'est mon cas) ca va extrémement vite et l'erreur on ne connaît pas.

    Sinon je comprends pas mon erreur de fenêtre. Quel rapport entre mes threads qui tournent en tâche de fond et de l'autre côté l'IHM. Je clic sur un bouton et le code de ce bouton ce n'est rien d'autre quand Ouvre(MaFenetre)... En plus cela n'arrive que lorsque j'appuie sur un bouton..

  17. #17
    Membre habitué Avatar de Christophe.LOGEL
    Homme Profil pro
    Expert WinDev / WebDev
    Inscrit en
    Mars 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Expert WinDev / WebDev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 121
    Points : 182
    Points
    182
    Par défaut
    Re,

    Il faut passer par une fenêtre intermédaire, je m'explique :
    - Première fenêtre du projet : Uniquement affichage d'un message "Veuillez patienter" puis tu lances les threads en tâche de fond.
    - Une fois les threads lancés tu ouvres la fenêtre principale du projet (ton IHM). Biensur il faut laisser la première fenêtre ouverte mais elle est masqué par la fenêtre IHM donc ca va

    Les threads sont liès à la première fenêtre et non plus à la fenêtre de l'IHM, donc moins de soucis. J'avais utilisé cette astuce dans un projet et ca fonctionnait bien.

    Bon dév.,

    Totof
    www.sigmasys.fr

  18. #18
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Ca m'ennuie de devoir faire comme cela Mais je comprends ce que tu veux dire ainsi mes threads ne sont plus liés à l'IHM. Cependant si je les lances à l'initialisation du projet ils ne seront plus liés à l'ihm aussi non ?

    Ces chiants ces problémes là car ils sont difficilement reproductible à la limite je ne sais meme pas comment le reproduire...

    PS : j'avais encore un objet partagé qui traîné.

  19. #19
    Membre habitué Avatar de Christophe.LOGEL
    Homme Profil pro
    Expert WinDev / WebDev
    Inscrit en
    Mars 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Expert WinDev / WebDev
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 121
    Points : 182
    Points
    182
    Par défaut
    Bonjour,

    Il faut éviter de lancer les threads dans l'initialisation du projet ca peut générer des problèmes ...

    Bon dév.,

    Totof
    www.sigmasys.fr

  20. #20
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Ok. Ce que je vais faire comme tu dis c'est

    1-Créer une fenetre de démarrage dans laquelle je lance mes différents threads mais à l'état suspendu et cela à l'initialisation du projet.


    2-J'ouvre ensuite ma fenetre principale depuis la fenetre de démarrage et à l'intialisation je redemarre mes threads.

    Qu'est-ce que tu en dis ?

Discussions similaires

  1. Combo Box qui ne s'ouvre pas ?
    Par poulette3000 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 06/06/2007, 14h39
  2. PDF qui ne s'ouvre pas sous IE
    Par keub51 dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2007, 11h56
  3. Réponses: 4
    Dernier message: 12/10/2006, 12h43
  4. [BDS 2006] Fichier d'aide qui ne s'ouvre pas
    Par doudoustephane dans le forum C++Builder
    Réponses: 5
    Dernier message: 31/08/2006, 20h07
  5. Fenetre qui ne s'ouvre pas
    Par Anduriel dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/06/2006, 11h23

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