Составители:
Рубрика:
81
датчика, Qt Mobility же координирует взаимодействие всех
«слушателей» и аппаратуры.
Важный вопрос, который актуален для датчика – способ
получения данных от него. Обычно выделяют два подхода –
поллинг и прерывания. Поллинг – это периодический опрос
датчиков с целью получить новые данные, реализуется проще всего
и наименее вычислительно эффективно. В случае использования
прерываний работа основной программы прерывается в момент,
когда датчик передает новое значение. Технически это может быть
реализовано по-разному – от аппаратных прерываний в
микроконтроллерах до специальных событий в современных event-
driven системах. В Qt естественно использовать механизм слотов и
сигналов:
QObject::connect(sensor, SIGNAL(readingChanged()),
widget, SLOT(handleSensor());
Отметим, что сам сигнал не несет никакой информации о новом
значении датчика, он лишь информирует обработчик о факте
изменения значения. Программист должен получить и обработать
новое значение в handleSensor() явным образом, например, так:
QAccelerometerReading reading = sensor.reading();
qreal x = reading->x();
Таким образом, если отказаться от сигнала readingChanged() и
просто вызывать handleSensor() раз в секунду (например, с
помощью таймера), мы получим поллинг.
Некоторые датчики, например, акселерометр, меняют свои
показания настолько часто, что механизм слотов и сигналов может
быть перегружен потоком вызовов. Чтобы решить эту проблему, API
датчиков включает в себя систему фильтров. Фильтр – это
наследник класса QSensorFilter, в котором программист
переопределяет один метод:
bool QSensorFilter::filter(QSensorReading* reading);
Этот метод должен возвращать истину в случае, если новое
значение датчика должно активировать сигнал readingChanged() и
ложь, если новое значение должно быть проигнорировано. Фильтр
устанавливается на датчик с помощью метода
Страницы
- « первая
- ‹ предыдущая
- …
- 79
- 80
- 81
- 82
- 83
- …
- следующая ›
- последняя »
