Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : release semaphore en desordre [ Système / API ] (aurelienparis12)

jeudi 15 mars 2007 à 20:04:37 | release semaphore en desordre

aurelienparis12

Bonjour,
j'espere quelqu'un pourra m'aider.
Pour un projet je doit faire des deplacement des pions  et j'aimerais les faire les un apres les autres donc j'ai utilisé un semaphore .
Le soucis c'est que le release ne relache pas forcement le premier entré. J'ai pourtant mis le boolean fair à true donc la semaphore est censé respecté la logique d'une pile FIFO .

la declaration de mon semaphore
[CODE]    Semaphore Sem = new Semaphore(1,true);[/CODE]

[CODE]public void deplacerPion(final int zonedepart,final int zonearrive,final int equipe,final int type){
        
        
        
        System.out.println("Demande de "+zonedepart+" vers "+zonearrive);
        
        new Thread() {
             Zone depart=zones.getZone(zonedepart);
             Zone arrive=zones.getZone(zonearrive);
             int orix;
             int oriy;
            
            int destx;
            int desty;
            Fonctions f ;
            
            private void init(){
                System.out.println("fait de "+zonedepart+" vers "+zonearrive);
                orix=depart.getCoor(equipe, type).getX();
                oriy=depart.getCoor(equipe, type).getY();
                poserPion(zonearrive,equipe,type,0);
                destx=arrive.getCoor(equipe, type).getX();
                desty=arrive.getCoor(equipe, type).getY();
                
                temp=new Pions(new Coor(orix,oriy));
                temp.setEquipe(equipe);
                temp.setType(type);
                deplacement=true;
                f = new Fonctions(orix, destx, oriy, desty);
                retirerPion(zonedepart,equipe,type,1);
                
            }
            
            public void run() {
                try {
                    Sem.acquire();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                init();
                //si deplacement vers la droite
                
                if (orix < destx) {
                    for (int i = orix; i < destx; i++) {
                        temp.getPosition().setX(i);//on augmente l'abscisse de l'image du pion
                        temp.getPosition().setY(f.use(i));// on applique la fonction f à l'ordonnée de l'image
                        repaint();//temps d'arret entre chaque images
                        try {
                            
                            Thread.sleep(5);//temps d'arret entre chaque images
                        } catch (InterruptedException ex) {
                            ex.printStackTrace();
                        }
                    }
                }
                //si deplacement vers la gauche
                if (orix > destx) {
                    for (int i = orix; destx < i; i--) {
                        temp.getPosition().setX(i);//on diminue l'abscisse d'affichage de l'image
                        temp.getPosition().setY(f.use(i));// on applique la fonction f à l'ordonnée de l'image
                        repaint();// on rafrachit l'image
                        try {
                            Thread.sleep(5);//temps d'arret entre chaque images
                        } catch (InterruptedException ex) {
                            ex.printStackTrace();
                        }
                    }
                }
                temp.getPosition().setX(destx);//on place le pion à sa destination
                temp.getPosition().setY(desty);
                repaint();
                deplacement=false;
                poserPion(zonearrive,equipe,type,1);
                Sem.release();
            }
            
        }.start();// on lance le deplacement du pion
        
        
    }[/CODE]


en executant :
[CODE]
deplacerPion(4,1,1,3);
deplacerPion(1,3,1,3);
deplacerPion(3,2,1,3);
deplacerPion(2,4,1,3);[/CODE]

j'obtiens :

[CODE]
Demande de 4 vers 1
Demande de 1 vers 3
Demande de 3 vers 2
fait de 4 vers 1
Demande de 2 vers 4
fait de 3 vers 2
Exception in thread "Thread-4" java.lang.NullPointerException
    at test.Plateau_jeu$1.init(Plateau_jeu.java:346)
    at test.Plateau_jeu$1.run(Plateau_jeu.java:369)
[/CODE]
ce qui est normal puisqu'il deplace le pions de la case 4 à 1 puis apres essaye de deplacer le pion de la case 3 vers 2 mais il n'y a pas de pions sur la case 3 donc ne trouve pas le pion à deplacer :cry:

Merci d'avance à tout ce qui auront tout lu meme s'il ne reponde pas au moins vous avez essayé .

vendredi 16 mars 2007 à 02:17:30 | Re : release semaphore en desordre

davidauche

c'est nécessaire d'utiliser un thread pour ce genre des choses?

vendredi 16 mars 2007 à 08:42:06 | Re : release semaphore en desordre

aurelienparis12

oui a cause de l'edt car on doit voir le pion se deplacer . Sans thread le pion apparaitrait directement à sa place final . De plus le thread.sleep bloquerai mon interface trop souvent .



Cette discussion est classé dans : code, int, type, temp, equipe


Répondre à ce message

Sujets en rapport avec ce message

Probleme de tableaux. [ par canvin ] Bonojour,Voici mon problème. j'ai fait une classe tableaux avec un constructeur. : public class Tableau{ private int tab[]; pu JNI: long int a quoi comme Native Type? [ par zebulaon ] Bonjour,Je cherche à savoir à mettre une variable C++ id : du type long int (enfin je crois que c'est ça qui correspond à: printf ("\nID______________ Création graphique avec cewolf [ par tochbill ] Bonjour,J'ai un petit problème concernant l'utilisation du code de cewolf (créer des graphiques).En faite je veut faire un graphique camenbert en 3D, pixelgrabber - conversion RGB/int [ par lutecefalco ] qd on utilise un pixelgrabber et pixelgrab(), ça remplit un tableau d'entiers en fonction du code RGB.Je trouve pas l'algo qui permet de passer du cod Impression [ par tominfo ] Salut, j'ai un problème avec l'impression d'un objet Graphics2D. En effet, soit l'imprimante ne réagit pas, soit elle sort un feuille blanche.Voici mo quel est le code source de la fct loop(int i) de l'interface clip [ par nien ] vola tt est dans le titre: il me faudrat le code source de cette fct .. merci paske c un tp a rendre pour bientot ..:) comment marche toArray() de java.util.ArrayList() ? [ par Pratana ] jai pas trop saisit comment ca marche en fait.j'essaye de classer une ArrayList constitué d'objet diverse. (regardez mon code) et de classer ca par or JTable et utilisation de variables type double [ par Deun ] Salut, Bon, je viens de mettre à Java.... et même à la progrmmation tout court en fait. Alors voilà mon soucis (la solution doit être évidente, car a Serialisation et déserialisation d'un objet avec RMI [ par nejah_zouari ] bonjour,Soit la classe définit ci dessous,public class Shape implements Serializable  {  transient int  x,y,width,heigh, code;  Color color;  public S Spring , Swing et m2vc [ par joekoke ] Bonjour à tous, voilà je commence à developper une appli en swing et je veux utiliser le moteur m2vc pour faire une appli 3 couche. le probleme en fa


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.