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 :

Comment attendre une information d'un thread dans le thread principal ? [QThread]


Sujet :

Multithreading

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Comment attendre une information d'un thread dans le thread principal ?
    Bonjour,

    Je cherche à mettre en attente mon mainthread (avec une limite de temps) d'une information venant de mon thread.

    Mon thread regarde ce qui arrive sur une liaison série, tri les informations, et envoie au mainthread les informations qui le concerne.

    Lors de l'envoie d'une information par le mainthread sur la liaison série, le circuit connecter sur cette liaison série envoie un Acquittement, Je cherche à mettre en attente mon mainthread de l'acquittement.

    J'utilise Qt 4.6.2, j'ai cherchez sur le site de trolltech les outils disponibles mais je n'ai pas trouvé ce que je voulais. Je ne sais pas si on peut utiliser Qevent pour générer un évenement avec une fonction du genre MonEvent.wait(limitetime).

    Je débute en programmation, je m'excuse si cela vous parait évident!!

    Merci d'avance.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    Je sais pas trop ce que fait ta thread principale, mais l'utilisation des signal/slot te permettrais de ne pas la bloquer.

    Sinon, sans explication plus précise, je pense que QWAitCondition correspond :
    http://qt.developpez.com/doc/latest/qwaitcondition.html

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Ma mainthread est une interface utilisateur, choix des commandes à envoyer et récupération du status du circuit.

    Ma thread tris les informations venant du port série (un flux de datalogging et les informations d'acquittement de commandes que je lui envoi).

    QWAitCondition ne s'utilise qu'avec un mutex ou un ReadWriteLock, je voudrais juste envoyer un acquittement de mon thread a mon mainthread pour lui indiquer que la commande est bien passé.

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Salut,

    Du coup j'ai bien relu toutes les docs et la solution avec Qwaitcondition fonctionne comme je le souhaite.

    Merci

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Une petite question supplémentaire concernant QWaitCondition.

    Je suis un peu dans le même cas, mon MainThread attends pendant qu'un pool de Thread travaillent. Mais ces threads doivent avoir accès à une méthode du MainThread pour signaler qu'ils n'ont plus de travail et pour éventuellement en récupérer de nouveau (producteur/consommateur quoi)... Si le MainThread attend sur une QWaitCondition, est ce que ses méthodes sont toujours accessibles? Ou est ce que je dois réveiller mon MainThread avant?

    Merci d'avance.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par OsoFr Voir le message
    Si le MainThread attend sur une QWaitCondition, est ce que ses méthodes sont toujours accessibles? Ou est ce que je dois réveiller mon MainThread avant?.
    Ca dépend de ce que sont ces fonction et de comment tu les appel.
    Vue ce que tu dit, je ne pense que tu utilisa la bonne solution.
    Si tu pouvais faire un nouveau thread en expliquant ton architecture multithread, on devrais pouvoir mieux t'aider

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

Discussions similaires

  1. [Débutant] comment conserver les informations d'un utilisateur dans une variable?
    Par beaudelaire dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/12/2011, 06h31
  2. [MySQL] comment insérer les informations d'un formulaire dans une table
    Par eljed dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/05/2011, 12h01
  3. Attendre une information dans une boucle
    Par michel71 dans le forum Langage
    Réponses: 6
    Dernier message: 29/07/2008, 23h57
  4. Comment passer une information entre des threads ?
    Par TheCaribouX dans le forum C#
    Réponses: 10
    Dernier message: 31/03/2008, 14h29
  5. Réponses: 10
    Dernier message: 19/09/2005, 22h24

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