Synchronisation d'un thread
Bonjour,
J'ai un problème de synchronisation d'un thread que je n'arrive pas à résoudre pour mon logiciel Jalmus.
J'ai tout d'abord une séquence MIDI avec la partition correspondante qui s'affiche à l'écran. L'utilisateur utilise le clavier pour donner le rythme : pour cela un curseur parcourt la partition à la même vitesse que la musique et si l'utilisateur tape et que le curseur est au même niveau que le rythme c'est qu'il a bien répondu.
Voici ce que cela donne pratiquement :
http://img7.hostingpics.net/pics/823...ure_Jalmus.png
J'utilise un thread pour le déplacement du curseur avec le booléen cursorstart pour le départ et dans le run :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
if (selectedGame == 2 && cursorstart) {
cursorspeed = (float) tempo/ (float) 55.520;
if (rhythmCursor < 714)
rhythmCursor = rhythmCursor + cursorspeed;
else {
if (rhythmAnswerDportee < dportee +200) {
rhythmAnswerDportee = rhythmAnswerDportee + 100;
rhythmCursor = (float) (72.0 + cursorspeed);
}
} |
Et pour lancer le curseur j'ai ajouté un marqueur sur le quatrième temps de ma séquence MIDI que je contrôle par :
Code:
1 2 3 4 5 6 7 8 9
| sm_sequencer.addMetaEventListener(new MetaEventListener() {
public void meta(MetaMessage meta) {
byte[] abData=meta.getData();
String strText=new String(abData);
if ("departthread".equals(strText)) {
cursorstart = true;
} |
Comme vous pouvez le voir sur l'image il y a un retard sur le démarrage du curseur (si l'on tient compte du décalage du premier temps cela semble bien fonctionner). Le curseur ne démarre pas immédiatement après avoir passé cursorstart à true.
Je ne maitrise pas très bien les thread. Y-a-t-il une solution pour le curseur démarre exactement sur le quatrième temps de ma séquence ?