Есть таблица, в ней можно меня ячейки. При изменении ячейки (OnCellChange) значение отсылается в устройство, то устанавливает его себе (возможно с коррекцией), отсылает назад сигнал со значением. Сигнал ловится в ПК и рисует в ячейки новое значение.
Есть две баги:
1. Если устройство решает каждый раз подстраивать значение (5,12 -> 5,13; 5,13 -> 5,12; etc) то получаем луп.
2. Если до прихода сигнала-подтверждения написать другое значение (например написали 1, жмакнули enter, написали 2, жмакнули enter, оба сообщения ушли в очередь отправки, ушло 1, пришло 1, отобразилось 1, ушло 2, пришло 2, отобразилось 2) иногда гуй не успевает обработать событие о смене и получается так: ушло 1, пришло 1, ушло 2, отобразилось 1, пришло 2, ушло 1, отобразилось 2, пришло 1, ушло 2... Получается луп 1-2-1-2-1-2...
Самым простым способом все это решить будет на отображение вызывать функцию смены содержимого ячейки такую, которая не будет инициировать OnCellChange, оставив, таким образом, только юзер-initiated вызовы.
Вариант 2 - disconnect\connect на обработчик OnCellChange на период, когда пришло подтверждение и его надо отобразить. Проблема в том, что мгновенно оно не отключится, работает не всегда.