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

Concurrence et multi-thread Java Discussion :

Gestion du Thread KeyListener


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par défaut Gestion du Thread KeyListener
    Bonjour, je fais un programme graphique dans lequel mon KeyListener modifie les variables d'un tableau.Cependant, mon Listener traite plus rapidement cette saisie que le rafraichissement de mon canvas.

    Je peus donc créer un Thread qui va copier sur un nouveau tableau les variables du précédent tableau: mais si je dépasse la pulsation du Thread, je doit réinitialiser le premier tableau pour avoir la fluidité!

    Sinon je peus mettre une condition sur l'écriture du tableau en milisecond pour ajuster le changement des variables à mon canvas(j'ai pas trop envis)!


    Et en dernier, ce que je me demande; est ce qu'il y a une commande pour ralentir mon Thread KeyListener ou est ce qu'il y a une façon d'implementer mon KeyListener dans un deuxième Thread.









    public class OutputListener implements KeyListener{

    DrawScreen draw;
    Camera camera;

    public OutputListener(DrawScreen draw){
    this.draw=drawGL;
    camera=new Camera();
    }


    public void keyPressed(KeyEvent keyevent){

    if (keyevent.getKeyCode()==KeyEvent.VK_ESCAPE){
    System.exit(0);
    }

    if (keyevent.getKeyCode()==KeyEvent.VK_UP){
    camera.addtoCameraPosition(1,0,0);
    }

    if (keyevent.getKeyCode()==KeyEvent.VK_DOWN) {
    camera.addtoCameraPosition(-1,0,0);
    }

    if (keyevent.getKeyCode()==KeyEvent.VK_LEFT) {
    camera.addtoCameraPosition(0,-1,0);
    }

    if (keyevent.getKeyCode()==KeyEvent.VK_RIGHT) {
    camera.addtoCameraPosition(0,1,0);

    }


    draw.genCameraPosition(camera.cameraPosition);

    }

    public void keyReleased(KeyEvent keyevent){}

    public void keyTyped(KeyEvent keyEvent){}


    }

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    J'ai quelque mal à comprendre, toujours est-il qu'à mon avis c'est toujours tangent de traiter les problèmes de thread avec des tempos ; des fois cela sort de situations difficiles, mais c'est plus de la chance qu'autre chose.

    Il me semble qu'il vaut mieux se caler sur le bon événement - le créer si nécessaire. J'ai l'impression que le bon événement serait la fin de l'action de raffraichissement de ton canvas, à partir duquel il serait d'actualité de répondre à l'événement keyListener ; mais c'est ce que j'ai du mal à comprendre à la lecture de ta question : je ne vois vraiment pas pour quelle raison il faudrait attendre un rafraichissement de canvas pour répondre à un keyListener.

    Enfin... toi, tu sais, et le principe que je te propose reste le même.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par défaut Re
    Le probleme, c'est que si je reste appuyé sur la touche "f", le KeyListener va créer plus de "f", donc d'appel à la fonction KeyType() que je n'ai de temps pour traiter les informations et les afficher à l'écran.

  4. #4
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    faut plutot utiliser KewReleased dans ce cas la touche est enregistree lorsque tu relaches...

  5. #5
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par défaut
    je suis d'accord, mais l'utilisation du Thread KeyListener n'est pas optimisé pour mon programme: car j'ai besoin d'un Thred plus lent; même si j'execute mon programme de maniere à suivre le rafraichissement du canvas.

    Le thread utilise du temps e calcul

  6. #6
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Là je tenterais une solution bourrin : je présume que tu lances un thread pour faire ton calcul, alors, à reception d'un keyTyped, je vérifierais si le thread est en cours avant d'en lancer un autre. S'il est en cours, alors je ne fais rien. Et s'il n'est pas en cours, alors j'en lance un autre.

  7. #7
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    Citation Envoyé par javator
    je suis d'accord, mais l'utilisation du Thread KeyListener n'est pas optimisé pour mon programme: car j'ai besoin d'un Thred plus lent; (...)

    Le thread utilise du temps e calcul
    Pour cela il y a les priorités de processus. de MIN_PRIORITY a MAX_PRIORITY en passant par la priorité normale: NORMAL_priority definie a 6 sur 10.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((Thread)t).setPriority(int level);
    tu mettrais MIN_PRIORITY ainsi les Threads JVM de fond passe en NORMAL avant le tien.

Discussions similaires

  1. gestion des threads
    Par yanis97 dans le forum Langage
    Réponses: 6
    Dernier message: 20/04/2006, 12h41
  2. Gestion des Threads
    Par Nalfouille dans le forum MFC
    Réponses: 3
    Dernier message: 05/04/2006, 16h29
  3. Gestion des threads
    Par yanis97 dans le forum C++
    Réponses: 6
    Dernier message: 08/03/2006, 09h39
  4. GEstion des thread
    Par Julien Dufour dans le forum Access
    Réponses: 8
    Dernier message: 06/10/2004, 14h28
  5. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40

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