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

Multithreading Discussion :

Problème de conception


Sujet :

Multithreading

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut Problème de conception
    Bonjour,

    Je viens faire appel à vous, car je me retrouve face à un problème de conception que je ne parviens pas à régler. Je pense que du code serait inutile ici, c'est plus la théorie qui me pose problème.

    Alors voilà, j'ai une application qui tourne.
    Je veux créer une deuxième fenêtre en cliquant sur un bouton, dans laquelle on pourra observer un visuel quelconque, (rendu, vidéo... peu importe)

    Il y a deux choses qui m'importent : Garder la main sur l'application lorsque la deuxième fenêtre est lancée. et faire en sorte dans cette fenêtre d'avoir un bouton permettant de stopper le rendu et de pouvoir le reprendre lorsque l'utilisateur le souhaite.

    Pour répondre à ce deuxième problème, j'ai scindé ma fenêtre en deux classes. Une première dérivant de QWidget affichant ce que je souhaite(appelons la QWi), et qui contient une instance de ma deuxième classe, qui elle dérive de QThread (appelons la QTh).
    Cette dernière est chargée de réaliser les calculs nécessaires à l'affichage.
    Jusqu'ici pas de problème tout cela fonctionne convenablement.

    Mais voila, le bouton que j'ai mis dans ma classe QW est incliquable. Il devient cliquable uniquement lorsque l'objet QTh a terminé sa tâche... Or c'est justement ce problème que je voulais contourner...

    Si quelqu'un a une petite idée, car la, je commence à patauger... Une idée aussi pour faire en sorte de pouvoir récupérer la main sur l'application principale une fois mon instance de QW lancée ?


    Dans tous les cas, je vous serais très reconnaissant

    Merci,
    Az

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Bon, j'ai essayé une nouvelle technique.
    Je crée ma nouvelle fenêtre myWidget, et j'essaye de créer un nouveau Thread afin de faire un moveToThread.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QThread * myThread;
    myThread = new QThread();
     
    myWidget->moveToThread(myThread);
     
    myThread->start();
    Seulement voilà, j'ai cette erreur lors de l'éxecution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::moveToThread: Widgets cannot be moved to a new thread
    C'est assez étrange, j'ai du mal à comprendre qu'on ne puisse pas lancé un nouveau Widget ou une nouvelle fenêtre de cette manière.

    Je vais donc tester de créer une sous classe de QThread qui s'occuppe de tout lancer, mais cela rejoint à ce que j'ai fais précédemment, et cela risque de ne pas marcher... :/

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour

    Pas de GUI dans les threads. Un peu de lecture Les threads sans maux de tête et Vous vous y prenez mal...
    Il n'y a que le calcul qui doit être déporté dans le trhead

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Oui, j'ai pourtant bien lus ces deux bouts de FAQ, mais ils ne m'ont pas permis de comprendre comme faire pour pouvoir lancer une deuxième fenêtre, tout en gardant le contrôle sur la première :/. Un peu à la manière d'une application démarrée avec QProccess...

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    en fait, lorsque tu as 2 fenêtres d'ouvert, tu peux normalement cliquer sur les 2 fenêtres et elles restent accessibles. Donc, il faut juste déporter ton code de calcul dans le thread, rien d'autres.

    Peut être prendre comme exemple ce qui se fait avec OpenGL : OpenGL threadé dans Qt 4.8 et Apercevoir la troisième dimension

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Points : 68
    Points
    68
    Par défaut
    Donc, il faut juste déporter ton code de calcul dans le thread, rien d'autres.
    Le hic, c'est que c'est bien ce que j'ai essayé de faire. Ma première classe dérive de QWidget appelle le Thread qui lui s'occupe et des calculs, et de déssiner dans une Pixmap (jusque là, pas de soucis de GUI) que j'envoie par signal à mon Widget. les pixmap sont bien recues et déssinées, mais. Mon Widget comporte également un bouton qui lui est incliquable... Impossible donc de mettre mon Thread en pause avant qu'il soit terminé... Ma fenêtre principale et son QWidgets restent donc toutes deux bien figées...

    Je vais regarder du côté des liens que tu m'as filé..

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

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 11h04
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 22h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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