En supposant que je dois écrire 10 fois consécutivement sur un port série.Exécution synchrone entre méthodes et écouteur dans Java
for (int i = 1; i <= 10; i++) {
serialPort.writeInt(i);
// wait until SerialPortEventListener receives something then write again
}
ou:
void writeMoreDate(){
serialPort.writeInt(something);
// wait until SerialPortEventListener receives something then write again
serialPort.writeInt(something;
// wait until SerialPortEventListener receives something then write again
serialPort.writeInt(something);
}
Et j'ai un port série événement Listener, qui se déclenche chaque fois que j'écris quelque chose, et appelle .map() méthode.
@Override
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {
//when data arrived do something and notify that next method can execute!
}
}
Comment puis-je faire attendre que serialEvent reçoive quelque chose?
-Ce est comment je manié ce jusqu'à maintenant en utilisant java.util.concurrent.Semaphore:
ex:
Semaphore semaphore = new Semaphore(MAX_CONCURRENT_THREADS, true);
void writeMoreDate(){
Runnable runnable() -> {
serialPort.writeInt(something);
semaphore.acquire();
serialPort.writeInt(something;
semaphore.acquire();
serialPort.writeInt(something);
semaphore.acquire();
}
new Thread(runnable).start();
}
et série Listener:
@Override
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {
semaphore.release();
}
}
Mais je ne suis pas sûr si c'est la bonne solution. Merci.
Normalement, si vous voulez attendre jusqu'à ce que vous avez reçu des données, vous n'utiliser une boucle. Au contraire, vous feriez votre appel en écriture dans l'écouteur lors de la notification. – ControlAltDel
Je dois écrire une image ISO flash sur le port série en écrivant 128 octets par temps, dans une boucle for. Après chaque écriture, l'écouteur confirme que tout va bien, et c'est l'indicateur pour envoyer 128 octets supplémentaires. C'est pourquoi j'ai besoin de cela dans une boucle for. – Mardari
Donc, lisez jusqu'à ce que vous avez 128 octets, puis écrivez ce morceau. Pourquoi c'est un problème? – ControlAltDel