Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Embedded Linux
события таймера в Qt
alekstr
Добавлено 22.07.2013 07:55 Редактировалось 22.07.2013 07:56
0
Сообщение: 1
alekstr
0

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

Пункты: 83542
Регистрация: 14.08.2009
Цитата

У меня запуск данного приложения реализован при старте системы в скрипте /etc/init.d/s90app. Так вот при запуске системы (соответственно до входа в консоль root) приложение работает как положено


а если запустить так из консоли - работает ?

/etc/init.d/s90app start
Спуститься к концу Подняться к началу
Персональная информация
alekstr
Добавлено 22.07.2013 13:16 Редактировалось 22.07.2013 13:19 Сообщение: 3
alekstr
0

Пункты: 1244
Регистрация: 20.10.2011
Пол: Мужчина
Цитата

а если запустить так из консоли - работает ?
/etc/init.d/s90app start

Попробовал - не работает, в смысле эффект такой же: обработчик события таймера срабатывает только при нажатии клавиш, обработка которых прописана. В принципе, казалось бы, пусть себе так и будет, в конечном продукте входа в консоль все равно не будет. Но эффект интересный, хотелось бы понять.
Спуститься к концу Подняться к началу
Персональная информация
alekstr
Добавлено 23.07.2013 07:00 Сообщение: 4
alekstr
0

Пункты: 1244
Регистрация: 20.10.2011
Пол: Мужчина
Попробовал не входя в консоль запустить приложение удаленно из среды Qt - результат тот же. Получается, дело не в факте входа в консоль.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 23.07.2013 11:40 Редактировалось 23.07.2013 11:40 Сообщение: 5
sasamy
4.71

Пункты: 83542
Регистрация: 14.08.2009
Цитата

обработчик события таймера срабатывает только при нажатии клавиш


У вас в программе случайно нет бесконечного цикла ? типа

MyApp::run() {
// .....
for(;;) {
// ...
}
}
Спуститься к концу Подняться к началу
Персональная информация
alekstr
Добавлено 23.07.2013 13:20 Сообщение: 6
alekstr
0

Пункты: 1244
Регистрация: 20.10.2011
Пол: Мужчина
Цитата

У вас в программе случайно нет бесконечного цикла ? типа
}


Не, такого цикла нет. Есть обработчик клавиатуры и опрос периферийного устройства через COM-порт и механизм сигналов-слотов. Когда этот фокус проявился, периферийное устройство не работало, я делал кусок программы, связанный с отображением. Сейчас периферия заработала, и эффект исчез, события таймера пошли нормально. Значит какая-то завязка была с портом. Но вот почему при автозагрузке работало? Я уже думал, что это связано с первым и повторным запуском программы, убрал из загрузочного скрипта и запускал первый раз с консоли - не работает таймер.
Загадочны пути событий в операционной системе.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux