Официальный форум СВД Встраиваемые Системы
05 Декабря, 2016, 19:39:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Работа с окнами в QNX  (Прочитано 466 раз)
Владимир696
Пользователь

Сообщений: 20


« : 30 Сентября, 2016, 10:24:43 »

Добрый день!

Подскажите, друзья, при построении окна в фотоне я привязываю событие к нажатию кнопки (действие "Arm" во вкладке Callbacks). По нажатию на кнопку у меня осуществляется один цикл опроса регистров и вывод информации на экран моего приложения после завершения опроса. Если я делаю несколько циклов опроса регистров, который запускается нажатием на кнопку, то в моём окне не отображается информация о чтении регистров, пока не закончатся все циклы опроса. Только после этого на экране отображаются последние прочитанные значения из регистра. Как можно сделать, чтобы информация после каждого цикла опроса регистров отображалась в моём окне?

Заранее благодарю

С уважением, Владимир Потапченко
Записан
Игорь Косик
Сотрудник СВД ВС
Пользователь

Сообщений: 11


WWW
« Ответ #1 : 30 Сентября, 2016, 11:59:16 »

Добрый день.

Добиться принудительной немедленной перерисовки виджетов можно с помощью функции PtFlush().
Возможно, Вам так же придется вызвать PtDamageWidget() для каждого виджета, которого Вы хотите обновить, перед использованием PtFlush().
« Последнее редактирование: 30 Сентября, 2016, 12:00:51 от Игорь Косик » Записан

Сотрудник СВД Встраиваемые Системы
Владимир696
Пользователь

Сообщений: 20


« Ответ #2 : 03 Октября, 2016, 10:31:00 »

Благодарю, Игорь!
Виджеты перерисовываются теперь. Но есть ещё одна проблема. После нажатия кнопки - у меня запускается цикл анализа регистров и отображения результатов на экране, но пока не выполнится цикл - другие кнопки управления и другие виджеты остаются не доступными для управления во время работы цикла. Как можно сделать их доступными?
Записан
Игорь Косик
Сотрудник СВД ВС
Пользователь

Сообщений: 11


WWW
« Ответ #3 : 03 Октября, 2016, 11:26:54 »

Сделать интерфейс полноценно доступным во время выполнения задачи можно только вынеся эту задачу в отдельный поток.  Smiley

В качестве компромиссного варианта, Вы можете вставить в Ваш цикл вызовы функции PtBkgdHandlerProcess() - она вызовет обработчики для всех событий ожидающих обработки. К слову, она так же должна выполнить перерисовку всех нуждающихся виджетов как и PtFlush().
Записан

Сотрудник СВД Встраиваемые Системы
Владимир696
Пользователь

Сообщений: 20


« Ответ #4 : 03 Октября, 2016, 14:15:32 »

Класс! Благодарю, Игорь! Всё работает.
И ещё один вопрос. Для остановки всех работающих процессов и выхода из цикла чтения-отображения, какую лучше функцию использовать?
Записан
Игорь Косик
Сотрудник СВД ВС
Пользователь

Сообщений: 11


WWW
« Ответ #5 : 04 Октября, 2016, 11:08:27 »

Я Вас не совсем понял, что именно вы хотите сделать? Выйти из приложения, или прервать выполнение процедуры по нажатии кнопки "Отмена"? Опишите, пожалуйста, подробнее.  Smiley
Записан

Сотрудник СВД Встраиваемые Системы
Владимир696
Пользователь

Сообщений: 20


« Ответ #6 : 04 Октября, 2016, 13:48:32 »

Я хочу прекратить все процедуры по нажатию на кнопку "Прекратить чтение", но при этом, чтобы окно приложения не закрывалось.
Записан
Андрей Докучаев
Сотрудник СВД ВС
Ветеран

Сообщений: 652



WWW
« Ответ #7 : 04 Октября, 2016, 15:50:02 »

Я хочу прекратить все процедуры по нажатию на кнопку "Прекратить чтение", но при этом, чтобы окно приложения не закрывалось.

Если я правильно понял чего Вы пытаетесь достичь, то механизм прерывания собственного кода можете предусмотреть только Вы.
Записан

Владимир696
Пользователь

Сообщений: 20


« Ответ #8 : 04 Октября, 2016, 16:19:12 »

Да. abort() к примеру не подойдёт, т.к. вместе с процедурой закрывается и само окно. Как можно ещё прекратить выполнение процедуры по нажатию на кнопку, при этом чтобы окно не закрывалось?
Записан
Андрей Докучаев
Сотрудник СВД ВС
Ветеран

Сообщений: 652



WWW
« Ответ #9 : 04 Октября, 2016, 17:03:20 »

В случае единственного потока достаточно тривиальных вариантов. Например, установка глобального флага по нажатию кнопки и его анализ в цикле.
Записан

Владимир696
Пользователь

Сообщений: 20


« Ответ #10 : 04 Октября, 2016, 17:24:09 »

Ок. Спасибо, Друзья! Ваши советы полезные. Благодарю!
Записан
Владимир696
Пользователь

Сообщений: 20


« Ответ #11 : 14 Октября, 2016, 09:12:08 »

Друзья, использую сейчас виджет PtProgress и хочу заполнить его своим значением. Пока не получается. Подскажите, как это сделать грамотно. Буду очень признателен!
Записан
Владимир696
Пользователь

Сообщений: 20


« Ответ #12 : 14 Октября, 2016, 11:45:35 »

Может есть пример какой посмотреть. Будет вообще супер!
Записан
Андрей Докучаев
Сотрудник СВД ВС
Ветеран

Сообщений: 652



WWW
« Ответ #13 : 14 Октября, 2016, 13:02:07 »

Самое простое и быстрое это обратиться к справке.
Записан

Владимир696
Пользователь

Сообщений: 20


« Ответ #14 : 17 Октября, 2016, 17:18:24 »

Это я уже всё облазил
http://www.qnx.com/developers/docs/6.4.1/photon/widget_ref/ptprogress.html#Pt_ARG_PROGRESS_SPACING
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2016 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 11 Ноября, 2016, 22:24:05