Я делаю приложение в QT. Я использую QExtSerialPort для получения данных из последовательного порта моего компьютера (всякий раз, когда испускается сигнал readyread()). У меня также есть несколько таймеров, выполняющих другие действия через определенные промежутки времени. Сейчас заметил, что при включенных таймерах не все данные сигнала готовности выбрасываются намного меньше, чем когда таймеры не включены. Есть ли способ в QT убедиться, что все данные последовательного порта получены? Может быть, установив высокий приоритет для события readyread или что-то в этом роде?
Установите приоритет для событий
Ответы (1)
Существует разница между соединениями сигнал-слот и системой событий. Излучение сигнала и запуск слота не являются отдельными вещами — когда сигнал испускается, подключенные слоты начинают работать. Так что они (сигналы) не могут быть потеряны.
Все события отправляются через приложение, а также принимаются, но это может произойти позже. Когда управление возвращается в основной цикл обработки событий, все события, хранящиеся в очереди, будут обработаны.
Если вы сами публикуете события, вы можете использовать метод static void QCoreApplication::postEvent ( QObject* receiver, QEvent* event, int priority );
. События сортируются в порядке убывания приоритета, т. е. события с высоким приоритетом ставятся в очередь перед событиями с более низким приоритетом. Приоритет может быть любым целым числом, т.е. между INT_MAX и INT_MIN включительно; см. Qt::EventPriority для более подробной информации. События с одинаковым приоритетом будут обрабатываться в порядке публикации.