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

Windows Discussion :

Fenêtres enfants dans un thread secondaire


Sujet :

Windows

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut Fenêtres enfants dans un thread secondaire
    Bonjour,

    j'ai une application avec plusieurs fenêtres que je voudrais multi-threader.
    j'ai une fenêtre dans le thread principal. J'ai aussi plusieurs fenêtres enfants.
    je voudrais mettre toutes mes fenêtres enfants dans un thread secondaire.

    J'ai essayé de mettre mes createWindows et peekmessage dans un thread secondaire. Ça marche, j'ai ma fenêtre principale et mes fenêtres enfants qui s'affichent. Mais j'ai deux problèmes:
    _ Dans la barre de taches de Windows (en bas), j'ai une "application" qui s'affiche pour chaque fenêtre enfant.
    _ Lorsque je clique sur une fenêtre enfant et que je relâche la souris, un délai d'une seconde s'écoule avant que le focus ne revienne à la fenêtre principale (et ça semble ralentir fortement le thread principale, ce qui est un gros problème pour moi, puisque c'est une application 3D temps réel).

    Comment résoudre ces 2 problèmes ? Est-il vraiment possible/conseillé de créer et gérer ses fenêtres enfants dans un thread secondaire ?

    Mon problème à la base était d'accélérer le rendu de mes fenêtres secondaires, surtout que j'utilise des fenêtres transparentes qui ralentissent fortement mon application.
    Je ne sais pas si l'affichage des fenêtre transparentes est géré par le CPU ou le GPU.
    Le calcul des images (à rendre) de mes fenêtres enfants sont déjà effectués dans le thread secondaire, ça me semblait aussi logique de gérer mes fenêtres enfants dans le thread secondaire.

    Merci

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    On peut voir ton code ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut
    Ca va être compliqué.
    Je vais essayer de faire un petit programme qui montre le problème et le posté demain.

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut
    Mon premier problème est résolut. Je n'ai plus qu'une application dans la barre de tâches.

    Pour le deuxième problème. En fait, je force le focus sur la fenêtre principale à chaque rendu de frame (plusieurs fois par secondes) avec un SetFocus. Je pense que dans le cas du multi-threading les delais de traitement des messages sont plus longs.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    S'agit-il de vraies fenêtres enfants ou seulement de fenêtres "owned" ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut
    Ce sont des fenêtres enfants. En fait, à chaque boucle de ma fenêtre principale, je fais un SetFocus sur la fenêtre principale pour qu'elle reste toujours active.
    Sans le multithreading, ça va, c'est instantané. Mais avec, il y a un délais de presque une seconde pour revenir à la fenêtre principal, lorsque l'utilisateur clique sur une fenêtre enfant.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est moche. Et encore compliqué par le fait que les les deux threads se retrouvent à partager la même file d'événements parce qu'ils ont des fenêtres avec un lien de parenté.

    Franchement, dans des cas pareil tu devrais laisser la gestion des fenêtres à un même thread, et dans ton thread secondaire te contenter de faire des GetDC() + dessin + ReleaseDC()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut
    je le pense aussi. J'ai abandonnée l'idée.

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

Discussions similaires

  1. Modifier ListView dans un thread secondaire
    Par prologic dans le forum VB.NET
    Réponses: 16
    Dernier message: 09/01/2013, 09h19
  2. Executer une fonction (avec paramètres) dans un thread secondaire
    Par you38 dans le forum Threads & Processus
    Réponses: 21
    Dernier message: 06/08/2010, 08h12
  3. Réponses: 2
    Dernier message: 06/02/2007, 17h18
  4. Réponses: 5
    Dernier message: 02/11/2005, 12h01
  5. fenêtre d'attente dans un thread
    Par KRis dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2005, 10h29

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