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

avec Java Discussion :

[Thread] Attendre une entree de l'user


Sujet :

avec Java

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 228
    Points : 80
    Points
    80
    Par défaut [Thread] Attendre une entree de l'user
    Bonjour à tous,
    J'aimerais savoir comment faire pour attendre une donnée de l'utilisateur.
    Je code un UNO en java.

    J'ai une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(this.partieEnCours){
        joueur = choisitJoueur();
        joueur.jouer();
    }
    Quelque soit le type de joueur (virtuel ou reel) le joueur joue. Le problème est le suivant :
    Comment recuperer l'entree du joueur reel?

    Actuellement, j'ai un thread par vue, un thread par joueur reel, un thread main.
    Le joueur reel lance son thread, qui lance vue. La vue met en pause les autres, lors de l'actionPerformed, la vue reveille les threads. et le thread de la vue meurt & et reinstancié lors d'une nouvelle entree (Degueu mais je suis ouvert a toute solution). Le probleme est le suivant : Je suis obligé d'instancier a chaque fois le thread du joueur pour attendre une entree, non ?

    Comment faire ?

    Merci à ceux qui repondront

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Alors pour répondre directement à ton problème : Si ton Thread est tué à coup de notify ou qu'il est arrivé a la fin du code qu'il doit exécuter alors oui tu dois l'instancier à nouveau.

    Ensuite niveau conception, je pense que tu peux essayer de garder au moins les vues dans l'EDT plutôt que de faire un Thread pour chaque (idem pour les joueurs réels, ca limitera les erreurs au niveau des échanges de données). Surtout que tu nous fais, d'après ce que je comprends, un run&wait à chaque fois. Donc peut être que si tu modifies légèrement ton code tu peux virer pas mal de Threads (ce qui augmentera les performances de ton programme) en plus de n'utiliser en majorité que l'EDT (qui est thread-safe).

    Après tu peux garder ton code mais, dans ce cas là, je te conseille vivement de regarder les synchronized et/ou les Objets Lock (pour créer toi même des Thread-safe).

    PS : Il y a un truc que je ne comprends pas : tu m'avais dit sur un autre post que tes cartes étaient des boutons. Les boutons sont bloquant (et attendent donc une action user). Quand un joueur joue une carte ca passe automatiquement à un autre joueur et ainsi de suite. J'avoue j'ai du mal à saisir ton problème

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 228
    Points : 80
    Points
    80
    Par défaut
    En faite je me suis dit qu'il y aurait une vue par joueur reel et donc une fenetre par joueur reel ou alors une socket par joueur reel.
    Je vais essayer d'expliquer le problème :
    J'ai des joueurs virtuels qui jouent et un joueur reel (cas de base qui va être améliorer par la suite).
    Dans lalgo d'un tour de jeu : il y a une boucle qui fait jouer chaque joueur. Lorsque j'appelle la methode jouer d'un joueur reel, je me vois obligé de mettre lalgo qui recupere l'entree du joueur dans un thread a part:
    - 1 : Le controller instancie le thread
    - 2 : le controller active les boutons de la vue
    - 3 : la vue met en pause le thread qui controlle, avec tant que (attend = vrai) sleep(1000)
    C'est ici que ca coince, si je ne fais pas un thread par controller, alors le thread main ne repars pas. Je ne comprend pas pourquoi. J'ai donc effectué le bidouillage suivant :
    - 4 : le thread recupere lentree continue son algo et reveille le thread principal
    - 5 : le joueur suivant joue.

    Y'a t'il un autre moyen que le thread.sleep ou les multi thread pour attendre qu'un utilisateur ait cliqué?
    Je peux apporter plus de precisions a mon probleme si besoin.
    Merci encore des reponses

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Points : 68
    Points
    68
    Par défaut
    Ha ok donc tu comptes faire un programme qui tournerai sur plusieurs ordinateurs?

    Dans tout les cas, t as largement mieux que while(attend) sleep(1000). En effet, tu as la méthode wait() avec notify (ou notifyAll qui est plus conseillé, attention tout de même avec notifyAll si tu as plusieurs Threads, lis bien la doc).

    Plutôt que d'endormir ton processus, tu lui dis d'attendre et quand une action utilisateur intervient, tu le réveilles avec notify. wait et notify s'utilise avec des synchronized (regarde les synchronisation d'état, je pense que c'est ce qu'il te faut)

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 228
    Points : 80
    Points
    80
    Par défaut
    Bon et bien ce que je voulais eviter est bien là ! :p

    Merci encore super samusStrife !

    J'espere decliner le programme en appli android
    EDIT : c'était pas si compliqué ^^

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

Discussions similaires

  1. [QThread] Comment attendre une information d'un thread dans le thread principal ?
    Par f.denis dans le forum Multithreading
    Réponses: 5
    Dernier message: 15/04/2010, 11h57
  2. [Thread] laisser une fenetre s'afficher
    Par parisjohn dans le forum Concurrence et multi-thread
    Réponses: 11
    Dernier message: 25/08/2004, 15h05
  3. [Batch] Imposer une entree de password
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 07/05/2004, 17h52
  4. Thread dans une classe ?
    Par Sephi dans le forum Threads & Processus
    Réponses: 7
    Dernier message: 07/03/2004, 18h16
  5. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15

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