Звучит так, как будто вы просите всего, но без каких-либо потерь.
Есть несколько общих концепций, которые я знаю для обработки асинхронного ввода и изменений, таких как «нажатие клавиш», «события касания» и «объект, который меняет свое собственное состояние».
Большинство из этих концепций и механизмов полезны для всех типов выполнения программы и могут пересекать множество границ: процесс, поток и т. д. Это не самый исчерпывающий список, но он охватывает многие из тех, с которыми я сталкивался.
- Конечные автоматы
- Потоки
- Сообщения
- Циклы событий
- Сигналы и слоты
- Опрос
- Таймеры
- Функции обратного вызова
- Перехват ввода
- Трубы
- Розетки
Я бы порекомендовал изучить их в Википедии, в документации Qt или в книге по C++ и посмотреть, что работает или какой механизм вы хотите использовать в своей структуре.
Еще одна действительно хорошая идея — посмотреть, как архитекторы программирования делали это в прошлом, например, в исходном коде Linux или как Windows API позволяет вам получить доступ к такого рода информации в их фреймворках.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: ответ на комментарий/дополнения к вопросу
Я бы управлял буфером/очередью входящих координат и имел бы средство доступа для последней координаты. Затем я бы отслеживал такие события, как начало касания/нажатия/перетаскивания и конец одного, и имел бы какой-то таймер, когда выполняется долгое касание, и измерение минимального изменения, когда выполняется перетаскивание. .
Если бы я использовал это только с одной программой, я бы попытался создать интерфейс, похожий на тот, который я мог бы найти при использовании. Я слышал, что для такого ввода используется OpenSoundControl. Я создал поток, который собирает координаты и отслеживает события. Затем я опрашиваю эту информацию в программе/классе, который должен ее использовать.
person
phyatt
schedule
11.12.2012