Это может быть выполнено многими различными способами, и, в зависимости от сложности всего приложения, оно может быть простым, как супер-цикл, или сложным, как приложение, основанное на многозадачности, с несколькими независимыми задачами, каждая из которых выполняет свою задачу.(например, один выполняет обнаружение нажатия клавиши, другой имеет дело с последовательной связью, другой обновляет ЖК-дисплей [G] и т. д.).
Ваш конкретный пример может быть легко обработан с использованием подхода супер-цикла, хотя многозадачностьможет также использоваться для (IMO) простоты в кодировании.
Например, при использовании суперконтурного подхода, каждый раз при прохождении цикла вы вызываете подпрограмму обнаружения нажатия клавиши, которая проверяет, нажата ли клавиша, и считает ли времядо некоторого максимума, пока нажата клавиша все еще присутствует.Не блокирует, выходит сразу.Когда счетчик достигает минимума для принятия клавиши (например, что соответствует примерно 50-100 мсек), вы возвращаете нажатую клавишу и обнуляете счетчик (для автоматического повтора клавиши) или сохраняете клавишу во временном буфере и возвращаете ее только тогда, когдаклавиша в конце концов отпущена (если автоматическое повторение клавиши не требуется).
Дисплей работает аналогичным образом.Текущий экран обновляется в зависимости от того, в каком состоянии находится устройство. Когда клавиша ВВЕРХ / ВНИЗ (например) обнаружена, индекс элемента прокрутки изменяется вверх или вниз, и экран перерисовывается с новым состоянием.
Существуют определенные ситуации, когда многозадачность является единственным разумным способом решения таких проблем, если вы не хотите, чтобы ваше приложение превратилось в неразлаживаемый беспорядок флагов, и ifs.Одновременное (и плавное) взаимодействие с несколькими интерфейсами (например, GPS, GSM, пользовательский терминал, клавиша / ЖК-дисплей) является одним из таких примеров.
Кстати, прерывания для нажатия клавиш являются IMO излишним, если вы не в некоторой батареесохранение спящего режима и нужен аппаратный способ проснуться.Нажатие клавиш человека всегда слишком медленное по сравнению со скоростью процессора и может быть надежно обнаружено простым опросом.