Плата SK-9G45-OEM, приложение сделано в Qt.
В приложении нужно реализовать мигающий индикатор. Делаю это через QLabel, в котором меняю картинки через полсекунды. Сначала сделал это через сигнал-слот от QTimer. На настольном PC все заработало, на плате слот отрабатывал только при нажатии клавиш, обработка которых есть в keyPressEvent() данной формы. Попробовал заменить QTimer на низкоуровневый QBasicTimer и, соответственно, сигнал-слот на обработчик события timerEvent(QTimerEvent *). Эффект тот же. А потом заметил следующий эффект. У меня запуск данного приложения реализован при старте системы в скрипте /etc/init.d/s90app. Так вот при запуске системы (соответственно до входа в консоль root) приложение работает как положено, события таймера идут как часы. Но стоит завершить приложение и запустить его снова с консоли - все стоит и ждет нажатия клавиш на плате. На нажатия клавиш на консоли событий не возникает. Кто-нибудь сталкивался с чем-либо подобным?
Попробовал - не работает, в смысле эффект такой же: обработчик события таймера срабатывает только при нажатии клавиш, обработка которых прописана. В принципе, казалось бы, пусть себе так и будет, в конечном продукте входа в консоль все равно не будет. Но эффект интересный, хотелось бы понять.
Не, такого цикла нет. Есть обработчик клавиатуры и опрос периферийного устройства через COM-порт и механизм сигналов-слотов. Когда этот фокус проявился, периферийное устройство не работало, я делал кусок программы, связанный с отображением. Сейчас периферия заработала, и эффект исчез, события таймера пошли нормально. Значит какая-то завязка была с портом. Но вот почему при автозагрузке работало? Я уже думал, что это связано с первым и повторным запуском программы, убрал из загрузочного скрипта и запускал первый раз с консоли - не работает таймер.
Загадочны пути событий в операционной системе.