Предполагая, что я должен писать 10 раз последовательно в последовательный порт.Синхронное выполнение между методами и слушателем в java
for (int i = 1; i <= 10; i++) {
serialPort.writeInt(i);
// wait until SerialPortEventListener receives something then write again
}
или:
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);
}
И у меня есть Serial Port Event Listener, что пожары каждый раз, когда я пишу что-то к нему, и называет .map() метод.
@Override
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {
//when data arrived do something and notify that next method can execute!
}
}
Как я могу заставить метод ждать, пока serialEvent не получит что-то?
-Этот как я не обрабатываются этого до сих пор с помощью java.util.concurrent.Semaphore:
экс:
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();
}
и на последовательный СЛУШАТЕЛЬ:
@Override
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {
semaphore.release();
}
}
Но я не уверен, что это правильное решение. Благодарю.
Обычно, если вы хотите ждать, пока вы не получили некоторые данные, вы бы не использовать для цикла. Скорее всего, вы будете писать свой вызов в слушателе при уведомлении. – ControlAltDel
Мне нужно записать фоновое изображение ISO в последовательный порт, записывая 128 байтов в раз в цикл for. После каждой записи слушатель подтверждает, что все в порядке, и это флаг для отправки еще 128 байт. Вот почему мне это нужно в цикле for. – Mardari
Итак, прочитайте, пока у вас не будет 128 байт, а затем напишите этот фрагмент. Почему это проблема? – ControlAltDel