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

wxWidgets Discussion :

wxThread en mode console


Sujet :

wxWidgets

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Points : 26
    Points
    26
    Par défaut wxThread en mode console
    Bonjour,

    Je souhaite utiliser un wxThread et lui adressé des wxEvent, cependant j’ai lu pas mal de trucs (truc1 et
    truc2) sur les wxThread et les Custom Event mais il me manque un détail pour que tout fonctionnent.

    Apparemment les évents sont récupérés dans le thread principal et c’est lui qui, grace a la table de mapping BEGIN_EVENT_TABLE appel les méthodes concerné par l’évent reçu.

    La table de mapping est toujours initialisé avec le thread principal (exemple : wxFrame) qui a accès a l’wxEvtHandler. Dans mon cas je n’ai pas de wxFrame car je souhaite faire une application console et j’aimerai que mes threads secondaires ai leurs propre file de message.


    1) Comment dois-je faire pour que mon thread puisse récupérer des events sans passer par le thread principal (mode console).

    Merci de votre aide.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    N'y a t'il pas un moyen pour que mon thread ait sa propre boucle de message ?

    Merci.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    A priori, je dirais qu'en mode console tu ne peux pas avoir de boucle de message.
    Ensuite, si tu veux une boucle de message (mais pas t'embêter avec trop d'IHM), tu peux toujours démarré en mode GUI et cacher la fenêtre.

    Sinon, tu utilises d'autres mécanismes de synchronisation et d'échange entre tes threads.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Points : 26
    Points
    26
    Par défaut
    Ok, si je passe par un main qui hérite de wxFrame pour avoir une boucle de message et que j'ai 5 threads qui tourne, j'aurai qu'une seule est unique boucle de message pour ces 5 threads ?

    Qu'est ce qu'il y a d'autre a part les Events pour communiquer de façon efficace (sans faire 35 000 wxMutex) avec mes wxThread (équivalent des messages sous win ?)

    Merci 3DArchi pour ta réponse.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par abcdefg Voir le message
    Ok, si je passe par un main qui hérite de wxFrame pour avoir une boucle de message et que j'ai 5 threads qui tourne, j'aurai qu'une seule est unique boucle de message pour ces 5 threads ?
    J'en sais rien. J'ai jamais essayé de faire dialoguer différents thread avec des wxEvent. A priori, je dirais que ça se passe mal
    Si je reprends la doc (c'est moi qui souligne) :
    If you do decide to use threads in your application, it is strongly recommended that no more than one thread calls GUI functions. The thread sample shows that it is possible for many different threads to call GUI functions at once (all the threads created in the sample access GUI), but it is a very poor design choice for anything except an example. The design which uses one GUI thread and several worker threads which communicate with the main one using events is much more robust and will undoubtedly save you countless problems (example: under Win32 a thread can only access GDI objects such as pens, brushes, &c created by itself and not by the other threads).

    For communication between secondary threads and the main thread, you may use wxEvtHandler::AddPendingEvent or its short version wxPostEvent. These functions have a thread-safe implementation so that they can be used as they are for sending events from one thread to another. However there is no built in method to send messages to the worker threads and you will need to use the available synchronization classes to implement the solution which suits your needs yourself. In particular, please note that it is not enough to derive your class from wxThread and wxEvtHandler to send messages to it: in fact, this does not work at all.
    Citation Envoyé par abcdefg Voir le message
    Qu'est ce qu'il y a d'autre a part les Events pour communiquer de façon efficace (sans faire 35 000 wxMutex) avec mes wxThread (équivalent des messages sous win ?)
    wxCondition ?

  6. #6
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Hello.
    Je m'incruste pour donner mon avis sur la question.

    Le principe de la wxFrame "masquée" est à mon avis le plus simple à mettre en oeuvre.

    Et à partir du moment où tu n'accèdes pas directement aux éléments de l'interface (qui de toute façon est cachée), tu n'auras sans doute pas à gérer 35000 Mutex.

    En fait, chaque fois qu'un thread voudra envoyer un événement, il suffira de faire un "AddPendingEvent" sur la frame qui se chargera de le redistribuer.

    Ensuite, dans chaque thread, tu mets en place une liste d'événements reçus (avec les accesseurs publics qui vont bien) et tu vas régulièrement vérifier si oui ou non un message est présent dans la liste.
    C'est à ce moment là que tu devra éventuellement utiliser les Mutex afin de ne pas accéder à la liste depuis le thread principal (lors de l'ajout d'un message) et en même temps depuis le thread concerné (pour récupérer un message et l'enlever de la liste).

    @+
    Xav'

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

Discussions similaires

  1. Mises à jour des paquetages en mode console
    Par Memnoch31 dans le forum Debian
    Réponses: 6
    Dernier message: 16/05/2004, 16h30
  2. Des couleurs en mode console
    Par davcha dans le forum MFC
    Réponses: 3
    Dernier message: 08/05/2004, 14h37
  3. Mode console par défaut
    Par sekiryou dans le forum Administration système
    Réponses: 5
    Dernier message: 05/03/2004, 06h38
  4. Mode console et MFC ??
    Par G3G3 dans le forum MFC
    Réponses: 7
    Dernier message: 20/02/2004, 17h49
  5. Editeur en mode console
    Par logramme dans le forum C
    Réponses: 5
    Dernier message: 11/06/2002, 13h23

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